Romlige forskjeller i næringsstruktur, virkninger av eksogene sjokk i basissysselsettingen, og lokale forskjeller I sysselsettingsvekst.

I denne oppgaven vil vi se på næringsstrukturer på Haugalandet, Sunnhordland og Ullensvang.

Problemstillinger og beregninger vi vil se nærmere på

Oversikt over befolkningene i regionene

Haugalandet

Haugalandet består av kommunene Bokn (852), Haugesund (37357), Karmøy (42186), Sauda (4595), Tysvær(11065), Utsira(198) og Vindafjord(8714). tilsammen bor det 104967 personer i denne regionen. i tidsperioden vi har hentet inn data har det vert kommunesammenslåing i denne regionen. Da ble Ølen og vindafjord slått i sammen til en kommune (hvordan har vi tatt hensyn til dette???)

Sunnhordland og Ullensvang

Sunnhordland og Ullensvang består av kommunene Bømlo(11957), Etne(4062), Fitjar(3189), Kvinnherad(13071), Stord(18759), Sveio(5766), Tysnes(2869) og Ullensvang(11048). Tilsammen bor det 70721 personer i denne regionen.

Tallene er hentet fra SSB 09.01.21 (https://www.ssb.no/statbank/table/01223/tableViewLayout1/) gjelder for 4 kvartal 2020.

“Forklar litt om de forskjellige næringene”…..

1 Sysselsetting i ulike næringer, etter arbeidssted

Haugalandet

Første regionen vi velger å se på er Haugalandet. Her ønsker vi å se på utviklingen fra 2008 til 2020, av antall ansatte i sin helhet i regionen, samt de 6 mest relevante næringene.

I 2020 er det i underkant av 50 000 ansatte i alle næringer på Haugalandet. Av Fig. 1 ser vi at Haugalandet fikk en nedgang i antall ansatte i 2015 og 2016. I 2017 og 2018 ble det vekst, frem til det snudde i 2019 igjen.

I Fig. 2 ser vi at flere av kommunene på Haugalandet har hatt liten arbeidsplassvekst, med unntak av Tysvær, Vindafjord og Karmøy i den siste tiårsperioden. Vi ser dette mer tydelig på fig. 3 og 4.

Figur 3 og 4 viser utviklingen av det totale antall ansatte i alle næringer på kommunalt nivå, innenfor Haugaland-regionen.

I disse figurene, så ser vi tydelig at Haugesund har hatt reduksjon i antall ansatte totalt sett, mens Karmøy, Vindafjord og Tysvær har hatt en markant vekst de siste ti årene. Siden Haugesund har flest arbeidsplasser betyr utviklingen i Haugesund mye for de samlede tallene.

Warning: Removed 1 row(s) containing missing values (geom_path).

Warning: Removed 1 row(s) containing missing values (geom_path).

Figur 5 og 6 viser utviklingen av de 6 mest relevante næringene i Haugalandsregionen på kommune nivå.

Vi ser i de tre største kommunene, Haugesund, Karmøy og Vindafjord utgjør næringene Helse- og Sosialtjenester og Industri de største. Helse- og Sosialtjenester har vokst jevnt og trutt de siste tiårene, mens antall ansatte i industrinæringen har variert fra kommune til kommune. I Haugalandet utgjør primærnæringer (jordbruk, Skogbrug og Fiske) en større andel, enn hos Karmøy og Haugesund hvor primærnæringene kun utgjøre en liten andel.

Sysselsettingsutviklingen for ulike næringer i ulike kommuner og for regionen samlet.

Det er relativt store kommunevise forskjeller i næringsstrukturen. Rogaland har en forholdsvis ensidig næringsstruktur, olje og gass er dominerende. Fylket er suverent dominerende for fossil energi. De har for øvrig de siste årene satset på et en mer differensiert næringsstruktur og næringsliv ved å satse på helse, IKT og fornybar energi.

I våre modeller, er satsingen på helse den mest tydelige. Av rent tekniske grunner er det vanskelig å se utviklingen i enkelte næringer som utgjør små andeler, på grunn av skalaen som er benyttet. Til tross for dette, kan man se at næringsstrukturen i regionen samlet generelt sett har endret seg lite.

Rogaland har gode jordbruksmuligheter, men i Fig. 2: Haugalandet ser vi en nedgang i sysselsettingen de siste tiårene, mens det er en marginal økning i Sunnhordaland, jf. Fig 9. I Fig. 12: ser vi at Tysnes har hatt en markant økning i primærnæringen, relativt sett.

Universitets- og høgskolesektoren er liten i Rogaland, og den består for det første av Universitetet i Stavanger (UiS) og Høgskulen på Vestlandet (HVL) med campus Haugesund.

Haugaland Vekst, som er eigd/drevet av Haugalandsregionen er i spissen på å legge til rette for å etablere ny industri samt andre arbeidsplasser i regionen.

I helsesektoren er Stavanger universitetssykehus (SuS) sentralt.

Sunnhordland

Videre ønsker vi å se på den samme utviklingen, men denne gangen i Sunnhordlandsregionen.

Her viser figur 7 utviklingen til den totale summen av ansatte i Sunnhordlandsregionen fra 2008 til 2020. Sunnhordaland har i 2020 i underkant av 25 500 ansatte. Vi ser ut ifrå figuren at Sunnhordlandsregionen hadde ein markant vekst ifrå 2008 til 2014 med periodar med svak nedgang. Fra 2014 har det vært en reduksjon i totalt antall ansatte.

Figur 8 viser utviklingen av totalt ansatte i Sunnhordlandsregionen på kommunenivå i hele regionen fra 2008 til 2020. Denne figuren gir oss en oversikt, men er ikke heilt brukervennelig. Vi lager dermed en mer oversiktlig figur, jf. figur 9 & 10.

Vi ser her ut ifra figur 9 og 10 utviklingen for hver enkelt kommune i Sunnhordland totalt sett, og her ser vi mye tydligere utviklingen fra 2008 til 2020. En kan se her at Kvinnherad, Etne og Fitjar har hatt en reduksjon i totalt ansatte, mens Tysnes og Sveio har hatt ein kraftig vekst. En interessant bemerking er Stord i 2014 og Kvinnherad fra 2008 til 2017.

For å få et bedre oversikt over utviklingen i kommunen ønsker vi å se på de 6 mest relevante næringene i hver kommune.

Warning: Removed 1 row(s) containing missing values (geom_path).

Figur 11 og 12 viser de 6 mest relevante næringene i hver enkelt kommune i Sunnhordlandsregionen fra 2008 til 2020.

En ser ut ifra figur 11 at i de tre største kommunene, Bømlo, Kvinnherad og Stord så har de alle hatt en reduksjon i industrien, samtidig som de har hatt en vekst i helse- og sosialtjenester. Tysnes har vært stabil når det kommer til industri, men har sett ein markant vekst i primærnæringen (Jordbruk, Skogbruk og Fiske).

Sysselsettingsutviklingen for ulike næringer i ulike kommuner og for regionen samlet.

Det første bemerkelsesverdige i Sunnhordlandsregionen er den markante reduksjonen i industri i Stord kommune i 2014, samt Kvinnherad fra 2008. Dette stemmer overens med to hendelser. Den første er oljeknekken i 2014 som medførte at bl.a. Aker Stord AS som er avhengig av Olje-industrien måtte permitere.

Stord er en kommune som har mye offshore industri. I 2008/2009 så stengte Sør-Norge Aluminium “B-Hallen” som medførte 50% reduksjon i produksjon, og dermed ansatte. Interessant å bemerke at i Kvinnherad så er antall industriarbeidere redusert samtidig som antall ansatte i Helse- og Sosialetjenester økt. Bømlo har også sett en stabil reduksjon i ansatte innen industri, samt vekst i Helse- og Sosialetjenester frem til 2018.

Ser en på hele Sunnhordlandsregionen i sin helhet, så ser vi en svært tydelig vekst innen Helse- og Sosialetjenester, og reduksjon innen industri i hele regionen. Kvinnherad, Tysnes og Fitjar har opplevd ein markant vekst innen primærnæring. Kan det vere ein grunn til dette som burde diskuterast??

Fortsett Her (OA, KH)

Hardanger

Til slutt må vi gjere det samme med Hardanger

I henhold til oppgavens krav til betrakter vi Hardanger før 2019 som Ullensvang- og Odda kommune som to separerte kommuner. i 2020 så ble Ullensvang, Odda og Jondal slått sammen til Ullensvang. Dette forklarer den voldsomme økningen i sysselsetting i regionen ved tidspunktet for kommunesammenslåing.

Warning: Removed 1 row(s) containing missing values (geom_path).

Ullensvang kommune har stor kraftproduksjon og hovednæringen er industri. Majoriteten av kraftproduksjonen foregår i tidligere Odda. Odda er et ensidig industristed, men har også en maritim næring i tillegg. I figur 16 ser vi at industrinæringen utgjør en betraktelig større andel av sysselsettingen i her. Industrinæringen er også omfattet og bygg- og anleggsvirksomhet. På motsatt side er jordbruk, helse- og sosialtjenester dominerende i Ullensvang.

Generelt om Ullensvang kommune

Ullensvang kommune (med Odda) har hatt en jevn og negativ befolkningsvekst i mange tiår. Det gjenspeiles ikke tydelig i våre modeller på grunn av skalaen som er brukt. I tillegg har vi ikke hensyntatt innvandrende arbeidere, eller midlertidige fraflyttede som for eksempel studenter.

2 (Dette er >EGENTLIG< siste del av oppgåve 3. Denne og Gini/RDI for oppgåve 3 bør bli byttast om)

Finner lokaliseringskvotienter for ulike næringer i ulike kommuner, og for regionen samlet

[1] 0.1050339
[1] 0.1050339

For region Haugaland:

Lokalkvotient, region: Haugalandet
År Alle Jordbruk Industri Vann Bygg Finans Underv. Helse
2008 50367 1.075456 1.527397 1.169062 1.017606 0.501835 0.933108 0.996224
2009 49548 1.084237 1.480269 1.158345 1.048055 0.483106 0.971070 1.000013
2010 49793 1.108506 1.434976 1.172909 1.060696 0.469899 0.968415 0.981693
2011 51035 1.129625 1.422513 1.174768 1.120299 0.436547 0.949340 0.983962
2012 51459 1.083943 1.446199 1.175755 1.058730 0.422893 0.964431 0.975939
2013 51940 1.061881 1.447049 1.174457 1.078970 0.398713 0.952646 0.979683
2014 52578 1.040438 1.443355 1.143914 1.069367 0.396168 0.959903 0.991453
2015 50552 1.103504 1.500907 1.112182 1.077831 0.379590 0.957596 1.006411
2016 50296 1.128518 1.529210 1.110672 1.056575 0.377096 0.983459 1.003760
2017 50976 1.115553 1.542237 1.112809 1.059688 0.372480 0.969197 1.011095
2018 51214 1.105522 1.545841 1.066554 1.038641 0.349450 0.977665 1.021492
2019 51670 1.093159 1.578607 1.074577 1.010368 0.327388 0.956960 1.025697
2020 51039 1.099049 1.601510 1.077858 0.991460 0.334849 0.952426 1.026936

GINI Regionaltnivå

Haugalandet

Haugalandet
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2008 50367 0.000002 0.000111 0 435.6012 18.70584 1399.9540
2009 49548 0.000003 0.000091 0 394.1549 21.69867 404507.3533
2010 49793 0.000005 0.000074 0 322.9766 25.47550 275.1527
2011 51035 0.000007 0.000071 0 291.8300 26.44261 313.0738
2012 51459 0.000003 0.000079 0 471.2626 25.31286 210.6607
2013 51940 0.000002 0.000079 0 663.1602 25.36956 249.2110
2014 52578 0.000001 0.000077 0 1031.8851 25.78627 590.1378
2015 50552 0.000004 0.000095 0 396.0033 24.04333 761.0617
2016 50296 0.000006 0.000104 0 317.7330 23.72055 1284.0690
2017 50976 0.000005 0.000109 0 356.6107 23.56357 436.3016
2018 51214 0.000004 0.000109 0 401.9133 23.54160 225.7136
2019 51670 0.000003 0.000122 0 461.0766 22.22460 189.0190
2020 51039 0.000004 0.000131 0 424.8519 21.55281 176.8174

GINI Kommunalt nivå

Haugesund

Haugesund: Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2008 17611 0.000028 0.000004 0.000000 43.39824 34.95132 55.70295
2009 17294 0.000029 0.000003 0.000000 42.50572 40.54894 60.75005
2010 17460 0.000027 0.000002 0.000000 46.40941 56.43869 82.04106
2011 17901 0.000027 0.000002 0.000000 51.26044 53.63729 67.07554
2012 18178 0.000026 0.000003 0.000000 54.34177 46.66353 141.25665
2013 18337 0.000027 0.000003 0.000000 55.25898 45.70694 113.64877
2014 18609 0.000026 0.000002 0.000000 57.08808 52.38028 115.16419
2015 17855 0.000024 0.000002 0.000000 56.93230 54.69388 57.73009
2016 17806 0.000026 0.000002 0.000000 54.61078 54.69499 57.46911
2017 18117 0.000024 0.000003 0.000000 57.21419 52.20065 55.82136
2018 18295 0.000026 0.000003 0.000000 56.40031 51.93576 54.49432
2019 18448 0.000026 0.000005 0.000000 57.74196 41.05048 47.42545
2020 18137 0.000024 0.000006 0.000001 58.31852 35.84411 40.22532
Haugesund: Lokalkvotient
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2008 17611 0.0074 0.1300 0.2071 4.3621 14.5332 27.1255 0.0017 0.0089 0.0076
2009 17294 0.0066 0.1206 0.2127 4.3486 13.8550 28.3388 0.0015 0.0087 0.0075
2010 17460 0.0070 0.1080 0.2107 4.1135 13.0092 28.6184 0.0017 0.0083 0.0074
2011 17901 0.0069 0.1082 0.2141 3.7834 12.8102 28.5035 0.0018 0.0084 0.0075
2012 18178 0.0069 0.1100 0.2044 3.6003 12.6100 28.0988 0.0019 0.0087 0.0073
2013 18337 0.0063 0.1101 0.2063 3.4804 12.5933 28.2089 0.0018 0.0087 0.0073
2014 18609 0.0064 0.1066 0.2069 3.4128 12.4561 28.2330 0.0019 0.0086 0.0073
2015 17855 0.0068 0.1013 0.2223 3.5487 12.0773 29.8133 0.0019 0.0084 0.0075
2016 17806 0.0062 0.0979 0.2245 3.5946 11.6931 30.4036 0.0017 0.0084 0.0074
2017 18117 0.0068 0.0974 0.2245 3.5460 11.4363 30.1846 0.0019 0.0085 0.0074
2018 18295 0.0058 0.0971 0.2245 3.4585 11.4145 30.2355 0.0017 0.0085 0.0074
2019 18448 0.0060 0.1021 0.2270 3.4205 11.4254 30.2480 0.0017 0.0089 0.0075
2020 18137 0.0066 0.1050 0.2348 3.5134 11.4044 31.0431 0.0019 0.0092 0.0076

GINI Kommunalt nivå

Bokn

Bokn: Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2008 412 0.000000 0 0 9.265663 66.04803 41.42099
2009 407 0.000000 0 0 8.350102 7395.58720 37.39901
2010 420 0.000001 0 0 8.232807 220.82720 24.16725
2011 428 0.000001 0 0 7.052729 619.24877 20.15114
2012 425 0.000001 0 0 8.132938 309.92125 48.03532
2013 439 0.000000 0 0 9.909167 82.94909 45.23552
2014 434 0.000000 0 0 9.731145 53.99395 47.98403
2015 424 0.000001 0 0 8.370275 62.40629 38.87511
2016 427 0.000001 0 0 7.420518 71.34951 27.64706
2017 424 0.000001 0 0 6.170807 72.90931 33.68794
2018 425 0.000001 0 0 6.748289 35.63639 31.23108
2019 443 0.000001 0 0 6.848420 35.29806 138.29443
2020 439 0.000001 0 0 7.760597 19.83052 138.30512
Bokn
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2008 412 0.1383 0.1165 0.1650 186.4587 621.2257 1159.483 0.0007 0.0002 0.0001
2009 407 0.1499 0.0958 0.1695 184.7789 588.7174 1204.155 0.0008 0.0002 0.0001
2010 420 0.1500 0.0857 0.1571 171.0048 540.8119 1189.709 0.0009 0.0002 0.0001
2011 428 0.1682 0.0911 0.1495 158.2407 535.7850 1192.154 0.0011 0.0002 0.0001
2012 425 0.1482 0.0918 0.1765 153.9906 539.3529 1201.835 0.0010 0.0002 0.0001
2013 439 0.1253 0.1002 0.1754 145.3759 526.0205 1178.283 0.0009 0.0002 0.0001
2014 434 0.1267 0.1060 0.1774 146.3318 534.0922 1210.571 0.0009 0.0002 0.0001
2015 424 0.1439 0.0991 0.1792 149.4387 508.5873 1255.465 0.0010 0.0002 0.0001
2016 427 0.1593 0.0937 0.1710 149.8970 487.6042 1267.838 0.0011 0.0002 0.0001
2017 424 0.1863 0.0920 0.1769 151.5165 488.6604 1289.752 0.0012 0.0002 0.0001
2018 425 0.1718 0.1059 0.1741 148.8776 491.3624 1301.548 0.0012 0.0002 0.0001
2019 443 0.1693 0.1061 0.1986 142.4424 475.7923 1259.628 0.0012 0.0002 0.0002
2020 439 0.1526 0.1276 0.2027 145.1549 471.1663 1282.524 0.0011 0.0003 0.0002

GINI Kommunalt nivå

Tysvær

Tysvær: Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2008 5193 0.000006 0 0 27.18744 93.37426 142.39765
2009 5145 0.000007 0 0 26.65220 75.33551 139.73894
2010 5219 0.000007 0 0 27.74925 124.19307 148.76566
2011 5574 0.000006 0 0 33.44731 109.10156 55.68156
2012 5470 0.000006 0 0 35.58264 79.62536 97.38526
2013 5482 0.000005 0 0 39.04164 73.44589 108.07665
2014 5591 0.000004 0 0 44.02012 69.92755 211.22384
2015 5412 0.000005 0 0 36.57733 67.12334 191.30078
2016 5409 0.000006 0 0 35.22895 52.97124 89.59993
2017 5437 0.000005 0 0 39.66927 56.35909 146.44512
2018 5444 0.000004 0 0 42.98937 49.78888 533.20329
2019 5550 0.000004 0 0 43.77327 51.67297 235.02172
2020 5503 0.000005 0 0 38.69103 44.91354 113.62509
Tysvær
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2008 5193 0.0672 0.1121 0.1822 14.7932 49.2865 91.9906 0.0045 0.0023 0.0020
2009 5145 0.0676 0.1092 0.1891 14.6171 46.5710 95.2558 0.0046 0.0023 0.0020
2010 5219 0.0646 0.0983 0.1918 13.7616 43.5219 95.7421 0.0047 0.0023 0.0020
2011 5574 0.0563 0.0987 0.1812 12.1505 41.1403 91.5396 0.0046 0.0024 0.0020
2012 5470 0.0534 0.1011 0.1870 11.9645 41.9059 93.3784 0.0045 0.0024 0.0020
2013 5482 0.0500 0.1018 0.1883 11.6417 42.1239 94.3572 0.0043 0.0024 0.0020
2014 5591 0.0467 0.1018 0.1935 11.3590 41.4588 93.9703 0.0041 0.0025 0.0021
2015 5412 0.0517 0.0979 0.1997 11.7077 39.8450 98.3586 0.0044 0.0025 0.0020
2016 5409 0.0529 0.0985 0.1960 11.8332 38.4927 100.0863 0.0045 0.0026 0.0020
2017 5437 0.0495 0.0960 0.1997 11.8159 38.1078 100.5803 0.0042 0.0025 0.0020
2018 5444 0.0468 0.0979 0.2043 11.6225 38.3595 101.6087 0.0040 0.0026 0.0020
2019 5550 0.0461 0.0971 0.2016 11.3697 37.9777 100.5432 0.0041 0.0026 0.0020
2020 5503 0.0496 0.0994 0.2012 11.5797 37.5871 102.3129 0.0043 0.0026 0.0020

GINI Kommunalt nivå

Karmøy

Karmøy: Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2008 20182 0.000002 0.000041 0 210.1846 12.24439 127.5319
2009 19767 0.000001 0.000031 0 243.0018 14.92759 210.9479
2010 19754 0.000001 0.000023 0 305.4325 17.96887 124.5623
2011 20028 0.000002 0.000020 0 226.4475 19.38142 202.8559
2012 20304 0.000002 0.000020 0 238.1573 19.57346 180.0833
2013 20572 0.000003 0.000019 0 201.0946 20.63139 185.2065
2014 20714 0.000003 0.000019 0 196.4961 20.71105 263.0355
2015 19862 0.000002 0.000022 0 199.4498 19.80640 988.7477
2016 19754 0.000001 0.000025 0 254.0459 18.89665 4244.5327
2017 20047 0.000002 0.000029 0 212.1639 17.99531 1844.0592
2018 20074 0.000001 0.000029 0 259.6066 17.81476 213.5412
2019 20247 0.000001 0.000030 0 314.5257 17.61376 213.9878
2020 20063 0.000002 0.000032 0 216.2718 17.03960 431.5109
Karmøy
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2008 20182 0.0257 0.1830 0.1813 3.8064 12.6818 23.6700 0.0067 0.0144 0.0077
2009 19767 0.0260 0.1629 0.1915 3.8046 12.1216 24.7934 0.0068 0.0134 0.0077
2010 19754 0.0253 0.1459 0.1905 3.6358 11.4985 25.2950 0.0069 0.0127 0.0075
2011 20028 0.0220 0.1411 0.1942 3.3816 11.4498 25.4764 0.0065 0.0123 0.0076
2012 20304 0.0211 0.1396 0.1917 3.2233 11.2896 25.1566 0.0065 0.0124 0.0076
2013 20572 0.0194 0.1366 0.1921 3.1023 11.2251 25.1442 0.0063 0.0122 0.0076
2014 20714 0.0189 0.1358 0.1945 3.0659 11.1903 25.3639 0.0062 0.0121 0.0077
2015 19862 0.0194 0.1335 0.2040 3.1901 10.8570 26.8008 0.0061 0.0123 0.0076
2016 19754 0.0206 0.1326 0.2069 3.2402 10.5400 27.4054 0.0063 0.0126 0.0075
2017 20047 0.0196 0.1338 0.2071 3.2046 10.3353 27.2786 0.0061 0.0129 0.0076
2018 20074 0.0197 0.1340 0.2108 3.1520 10.4030 27.5559 0.0063 0.0129 0.0077
2019 20247 0.0201 0.1345 0.2105 3.1166 10.4102 27.5604 0.0064 0.0129 0.0076
2020 20063 0.0191 0.1358 0.2123 3.1761 10.3096 28.0630 0.0060 0.0132 0.0076

Regionaltnivå Sunnhordaland

Lokalkvotient, region: Sunnhordland
År Alle Jordbruk Industri Vann Bygg Finans Underv. Helse
2008 29445 1.562780 2.063877 1.422696 1.034975 0.423280 0.997247 0.998972
2009 29185 1.558594 2.116018 1.436351 1.081539 0.404942 0.995434 1.009742
2010 28908 1.608714 2.063068 1.461356 1.070067 0.407326 1.010209 1.024944
2011 29332 1.737174 2.053014 1.466935 1.080975 0.380657 1.000001 1.046272
2012 29527 1.739018 2.165045 1.472302 1.040276 0.364909 0.997941 1.049037
2013 29873 1.713035 2.176943 1.419381 1.021741 0.364767 1.004810 1.025411
2014 30051 1.707905 2.189787 1.420744 1.036720 0.363253 1.003540 1.011095
2015 29086 1.844631 2.187086 1.485988 1.085872 0.352748 1.009778 1.021853
2016 28675 1.953790 2.111818 1.470846 1.089257 0.312783 1.025761 1.056156
2017 29079 2.049113 2.118740 1.466815 1.112108 0.300283 0.995529 1.040640
2018 29320 2.116192 2.215000 1.313150 1.126851 0.301181 0.969130 1.042201
2019 29654 2.145199 2.222865 1.340255 1.090133 0.255719 0.947806 1.047000
2020 29369 2.142107 2.229199 1.407657 1.070290 0.261191 0.950786 1.046473
Region: Sunnhordland
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2008 29445 0.000043 0.000154 0 58.40400 9.273062 5142.52351
2009 29185 0.000043 0.000170 0 59.43963 9.337835 522.97127
2010 28908 0.000049 0.000149 0 57.57220 10.423820 201.94226
2011 29332 0.000071 0.000145 0 51.31538 10.609886 108.51379
2012 29527 0.000071 0.000177 0 53.52955 9.694537 103.36437
2013 29873 0.000066 0.000180 0 57.55296 9.636353 199.24829
2014 30051 0.000064 0.000182 0 58.94442 9.608838 454.62880
2015 29086 0.000089 0.000177 0 48.52737 10.145402 223.25622
2016 28675 0.000110 0.000149 0 42.81287 11.290649 85.97281
2017 29079 0.000133 0.000151 0 39.27850 11.420913 119.11675
2018 29320 0.000149 0.000176 0 37.99581 10.576117 114.95231
2019 29654 0.000157 0.000179 0 37.50721 10.515724 103.34678
2020 29369 0.000156 0.000181 0 36.84531 10.546889 102.48422

Kommunale nivå i Sunnhordland

Stord
Stord: Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2020 9315 0.000004 0.000014 0 63.19494 9.776541 30.17621
2008 9284 0.000006 0.000032 0 50.28797 6.845987 67.67364
2009 9156 0.000006 0.000034 0 53.77525 6.953549 236.83459
2010 8995 0.000006 0.000024 0 55.94438 7.939886 131.16722
2011 9214 0.000005 0.000026 0 64.47141 7.813705 80.69517
2012 9294 0.000005 0.000030 0 64.32861 7.303575 126.64352
2013 9594 0.000006 0.000037 0 62.73749 6.814835 1391.00320
2014 9686 0.000006 0.000048 0 64.01234 6.458425 96.54460
2015 9312 0.000005 0.000045 0 62.47884 6.703168 612.56370
2016 9136 0.000004 0.000030 0 72.67704 8.000233 61.41133
2017 9306 0.000003 0.000030 0 92.66515 8.150315 68.08166
2018 9367 0.000002 0.000030 0 96.49302 8.070974 59.83225
2019 9461 0.000003 0.000032 0 93.83429 8.070992 118.95874
Stord:
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2020 9315 0.0146 0.2037 0.2223 8.2470 27.4767 51.2836 0.0018 0.0074 0.0043
2008 9284 0.0102 0.2420 0.1815 8.1005 25.8087 52.7888 0.0013 0.0094 0.0034
2009 9156 0.0099 0.2341 0.1943 7.8443 24.8079 54.5738 0.0013 0.0094 0.0036
2010 8995 0.0086 0.2155 0.2068 7.5294 25.4937 56.7251 0.0011 0.0085 0.0036
2011 9214 0.0098 0.2165 0.2097 7.1029 24.8779 55.4352 0.0014 0.0087 0.0038
2012 9294 0.0088 0.2251 0.2054 6.8668 24.8465 55.6559 0.0013 0.0091 0.0037
2013 9594 0.0080 0.2342 0.1990 6.6196 24.1605 54.7621 0.0012 0.0097 0.0036
2014 9686 0.0088 0.2379 0.1946 6.5416 22.2632 54.9574 0.0013 0.0107 0.0035
2015 9312 0.0085 0.2288 0.2088 6.8735 22.3590 58.1365 0.0012 0.0102 0.0036
2016 9136 0.0105 0.2033 0.2229 7.0319 22.6786 59.8572 0.0015 0.0090 0.0037
2017 9306 0.0128 0.2005 0.2208 6.7992 22.4403 59.4410 0.0019 0.0089 0.0037
2018 9367 0.0129 0.2017 0.2226 6.7366 22.5020 59.5724 0.0019 0.0090 0.0037
2019 9461 0.0131 0.2010 0.2184 6.7353 21.8626 59.5104 0.0019 0.0092 0.0037
Kvinnherad
Kvinnherad: Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2020 6426 0.000006 0.000003 0.000001 33.91130 15.423659 15.47467
2008 6769 0.000007 0.000010 0.000000 34.33768 8.729033 35.92204
2009 6679 0.000007 0.000010 0.000000 35.44808 9.183673 38.36807
2010 6599 0.000008 0.000006 0.000000 34.99792 11.818842 35.71691
2011 6601 0.000010 0.000005 0.000000 32.17855 12.754073 26.33049
2012 6519 0.000009 0.000007 0.000000 35.02118 10.377179 25.61857
2013 6485 0.000008 0.000006 0.000000 35.51768 11.647835 33.20765
2014 6494 0.000007 0.000006 0.000000 37.63277 12.030684 43.02561
2015 6300 0.000008 0.000004 0.000000 34.29156 15.627566 26.13257
2016 6190 0.000010 0.000003 0.000000 30.07995 16.705494 19.63051
2017 6282 0.000012 0.000003 0.000000 28.18598 17.204946 27.18925
2018 6337 0.000012 0.000006 0.000000 29.13999 11.818231 27.99519
2019 6417 0.000011 0.000007 0.000000 30.05487 11.773823 27.58081
Kvinnherad:
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2020 6426 0.0599 0.1662 0.2538 11.9547 39.8296 74.3397 0.0050 0.0042 0.0034
2008 6769 0.0592 0.2105 0.2241 11.1102 35.3978 72.4023 0.0053 0.0059 0.0031
2009 6679 0.0567 0.1991 0.2246 10.7534 34.0082 74.8133 0.0053 0.0059 0.0030
2010 6599 0.0550 0.1741 0.2272 10.2632 34.7501 77.3211 0.0054 0.0050 0.0029
2011 6601 0.0564 0.1669 0.2353 9.9146 34.7258 77.3792 0.0057 0.0048 0.0030
2012 6519 0.0529 0.1845 0.2365 9.7898 35.4231 79.3474 0.0054 0.0052 0.0030
2013 6485 0.0521 0.1733 0.2284 9.7931 35.7434 81.0159 0.0053 0.0048 0.0028
2014 6494 0.0510 0.1662 0.2282 9.7570 33.2062 81.9706 0.0052 0.0050 0.0028
2015 6300 0.0537 0.1437 0.2454 10.1597 33.0487 85.9313 0.0053 0.0043 0.0029
2016 6190 0.0575 0.1381 0.2575 10.3785 33.4721 88.3449 0.0055 0.0041 0.0029
2017 6282 0.0591 0.1359 0.2429 10.0721 33.2424 88.0544 0.0059 0.0041 0.0028
2018 6337 0.0576 0.1624 0.2416 9.9577 33.2612 88.0567 0.0058 0.0049 0.0027
2019 6417 0.0570 0.1621 0.2462 9.9303 32.2334 87.7401 0.0057 0.0050 0.0028
Bømlo
Bømlo: Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2020 5848 0.000007 0.000005 0 29.08302 9.743074 380.02821
2008 5700 0.000004 0.000014 0 38.42869 6.389865 28.97084
2009 5737 0.000004 0.000016 0 37.67003 6.400919 50.80768
2010 5760 0.000006 0.000013 0 34.34025 7.012061 78.74415
2011 5796 0.000006 0.000012 0 35.67080 7.292095 163.33776
2012 5886 0.000008 0.000013 0 33.14759 7.108538 109.98716
2013 5907 0.000007 0.000013 0 34.65795 7.192137 92.12473
2014 5934 0.000007 0.000015 0 34.65616 7.095670 69.57914
2015 5731 0.000009 0.000015 0 29.90300 7.168579 56.70645
2016 5570 0.000011 0.000012 0 26.41931 7.778663 72.71495
2017 5719 0.000013 0.000012 0 24.95726 8.055601 63.61677
2018 5839 0.000014 0.000012 0 24.84031 7.988428 54.00823
2019 5929 0.000012 0.000014 0 26.45622 7.536884 46.00553
Bømlo:
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2020 5848 0.0648 0.2040 0.1866 13.1363 43.7662 81.6872 0.0049 0.0047 0.0023
2008 5700 0.0561 0.2525 0.1618 13.1939 42.0365 85.9809 0.0043 0.0060 0.0019
2009 5737 0.0551 0.2465 0.1788 12.5191 39.5923 87.0974 0.0044 0.0062 0.0021
2010 5760 0.0556 0.2321 0.1865 11.7582 39.8118 88.5837 0.0047 0.0058 0.0021
2011 5796 0.0533 0.2257 0.1912 11.2916 39.5488 88.1263 0.0047 0.0057 0.0022
2012 5886 0.0545 0.2288 0.1884 10.8427 39.2326 87.8807 0.0050 0.0058 0.0021
2013 5907 0.0528 0.2265 0.1874 10.7513 39.2409 88.9433 0.0049 0.0058 0.0021
2014 5934 0.0533 0.2240 0.1906 10.6778 36.3399 89.7063 0.0050 0.0062 0.0021
2015 5731 0.0579 0.2192 0.1895 11.1684 36.3300 94.4629 0.0052 0.0060 0.0020
2016 5570 0.0621 0.2068 0.1928 11.5338 37.1978 98.1786 0.0054 0.0056 0.0020
2017 5719 0.0636 0.2020 0.1904 11.0636 36.5150 96.7229 0.0058 0.0055 0.0020
2018 5839 0.0635 0.2029 0.1874 10.8070 36.0980 95.5669 0.0059 0.0056 0.0020
2019 5929 0.0616 0.2098 0.1882 10.7477 34.8865 94.9617 0.0057 0.0060 0.0020
Sveio
Sveio: Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2020 2784 0.000001 0 0 38.50668 115.04908 25.94775
2008 2595 0.000002 0 0 27.65244 41.19821 68.87938
2009 2586 0.000003 0 0 22.06313 41.95849 74.68757
2010 2603 0.000002 0 0 27.34555 49.10003 115.21505
2011 2663 0.000002 0 0 29.69336 43.49666 76.91986
2012 2760 0.000003 0 0 25.14942 37.99313 58.86647
2013 2794 0.000003 0 0 27.38115 35.09685 77.47636
2014 2768 0.000001 0 0 39.84591 29.71046 595.69443
2015 2737 0.000003 0 0 23.39849 33.39148 246.93060
2016 2761 0.000003 0 0 25.33080 43.88875 67.90881
2017 2806 0.000003 0 0 27.02303 44.09602 86.12779
2018 2785 0.000002 0 0 29.57667 61.30920 85.34093
2019 2800 0.000003 0 0 27.59650 51.83161 79.76947
Sveio:
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2020 2784 0.0564 0.0927 0.2277 27.5938 91.9343 171.5902 0.0020 0.0010 0.0013
2008 2595 0.0663 0.1202 0.2108 28.9807 92.3345 188.8597 0.0023 0.0013 0.0011
2009 2586 0.0739 0.1141 0.2119 27.7734 87.8349 193.2243 0.0027 0.0013 0.0011
2010 2603 0.0630 0.1099 0.2078 26.0188 88.0968 196.0207 0.0024 0.0012 0.0011
2011 2663 0.0590 0.1115 0.2103 24.5760 86.0777 191.8062 0.0024 0.0013 0.0011
2012 2760 0.0641 0.1145 0.2145 23.1232 83.6678 187.4152 0.0028 0.0014 0.0011
2013 2794 0.0605 0.1160 0.2112 22.7301 82.9621 188.0415 0.0027 0.0014 0.0011
2014 2768 0.0495 0.1167 0.2066 22.8909 77.9050 192.3111 0.0022 0.0015 0.0011
2015 2737 0.0672 0.1096 0.2112 23.3855 76.0712 197.7958 0.0029 0.0014 0.0011
2016 2761 0.0637 0.1011 0.2213 23.2680 75.0424 198.0641 0.0027 0.0013 0.0011
2017 2806 0.0606 0.1005 0.2177 22.5492 74.4223 197.1340 0.0027 0.0014 0.0011
2018 2785 0.0571 0.0941 0.2176 22.6578 75.6826 200.3645 0.0025 0.0012 0.0011
2019 2800 0.0600 0.0964 0.2225 22.7582 73.8721 201.0814 0.0026 0.0013 0.0011

Reginonalt nivå Hardanger

Lokalkvotient, region: Hardanger
År Alle Jordbruk Industri Vann Bygg Finans Underv. Helse
2008 50367 1.075456 1.527397 1.169062 1.017606 0.501835 0.933108 0.996224
2009 49548 1.084237 1.480269 1.158345 1.048055 0.483106 0.971070 1.000013
2010 49793 1.108506 1.434976 1.172909 1.060696 0.469899 0.968415 0.981693
2011 51035 1.129625 1.422513 1.174768 1.120299 0.436547 0.949340 0.983962
2012 51459 1.083943 1.446199 1.175755 1.058730 0.422893 0.964431 0.975939
2013 51940 1.061881 1.447049 1.174457 1.078970 0.398713 0.952646 0.979683
2014 52578 1.040438 1.443355 1.143914 1.069367 0.396168 0.959903 0.991453
2015 50552 1.103504 1.500907 1.112182 1.077831 0.379590 0.957596 1.006411
2016 50296 1.128518 1.529210 1.110672 1.056575 0.377096 0.983459 1.003760
2017 50976 1.115553 1.542237 1.112809 1.059688 0.372480 0.969197 1.011095
2018 51214 1.105522 1.545841 1.066554 1.038641 0.349450 0.977665 1.021492
2019 51670 1.093159 1.578607 1.074577 1.010368 0.327388 0.956960 1.025697
2020 51039 1.099049 1.601510 1.077858 0.991460 0.334849 0.952426 1.026936
Region: Hardanger
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2008 5414 0.000001 0.000004 0 59.96659 10.91063 53.22427
2009 5341 0.000001 0.000004 0 58.60275 10.84496 42.48598
2010 5306 0.000001 0.000004 0 64.24148 11.14303 46.28134
2011 5248 0.000001 0.000005 0 71.62742 10.72620 61.15093
2012 5246 0.000001 0.000005 0 100.13550 10.02045 32.17932
2013 5192 0.000001 0.000005 0 107.09365 10.27692 34.95043
2014 5216 0.000001 0.000004 0 96.59781 10.80464 31.63555
2015 5058 0.000001 0.000005 0 98.02850 10.60330 36.84752
2016 5006 0.000000 0.000004 0 130.33884 12.05639 35.73029
2017 5058 0.000001 0.000005 0 98.68197 11.36289 34.36985
2018 5041 0.000001 0.000005 0 111.67900 10.35743 60.10977
2019 5041 0.000001 0.000006 0 95.76403 10.04206 44.15101
2020 5503 0.000003 0.000007 0 47.34605 10.39235 70.94348

Kommunale nivå i Hardanger

Odda
Odda(-2019): Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2008 3577 0.000001 0.000003 0 56.04192 7.508086 22.04430
2009 3528 0.000001 0.000004 0 56.66854 7.628783 19.43235
2010 3479 0.000000 0.000004 0 70.60748 7.611932 21.56251
2011 3449 0.000000 0.000004 0 76.34749 7.412556 25.71863
2012 3501 0.000000 0.000005 0 82.37645 7.001605 17.92695
2013 3458 0.000000 0.000004 0 83.80020 7.202658 19.98530
2014 3450 0.000000 0.000004 0 105.56842 7.562011 20.90855
2015 3351 0.000000 0.000004 0 82.22070 7.534437 25.94659
2016 3341 0.000000 0.000003 0 74.54582 8.591967 20.75448
2017 3371 0.000000 0.000004 0 91.58993 8.139226 20.85381
2018 3358 0.000000 0.000005 0 104.35618 7.517743 32.98889
2019 3350 0.000000 0.000005 0 79.77748 6.943171 28.55595
Odda(-2019)
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2008 3577 0.0126 0.2346 0.2346 21.4764 71.5530 133.5496 0.0006 0.0033 0.0018
2009 3528 0.0125 0.2270 0.2477 21.3166 67.9161 138.9147 0.0006 0.0033 0.0018
2010 3479 0.0144 0.2216 0.2449 20.6444 65.2892 143.6269 0.0007 0.0034 0.0017
2011 3449 0.0133 0.2244 0.2380 19.6367 66.4877 147.9391 0.0007 0.0034 0.0016
2012 3501 0.0131 0.2314 0.2531 18.6935 65.4742 145.8955 0.0007 0.0035 0.0017
2013 3458 0.0124 0.2270 0.2475 18.4558 66.7794 149.5853 0.0007 0.0034 0.0017
2014 3450 0.0145 0.2197 0.2461 18.4081 67.1872 152.2864 0.0008 0.0033 0.0016
2015 3351 0.0122 0.2158 0.2435 18.9084 64.3512 158.8532 0.0006 0.0034 0.0015
2016 3341 0.0111 0.1960 0.2553 19.1577 62.3188 162.0374 0.0006 0.0031 0.0016
2017 3371 0.0133 0.2011 0.2545 19.0575 61.4631 162.2234 0.0007 0.0033 0.0016
2018 3358 0.0140 0.2108 0.2365 18.8425 62.1885 164.7284 0.0007 0.0034 0.0014
2019 3350 0.0107 0.2218 0.2409 18.8364 62.9182 166.5716 0.0006 0.0035 0.0014
Ullensvang
Ullensvang: Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2020 5503 0.000001 0.000002 0 69.15414 13.88973 28.67901
2008 1837 0.000004 0.000000 0 11.87667 61.80070 24.97574
2009 1813 0.000005 0.000000 0 11.60197 44.88739 30.25757
2010 1827 0.000004 0.000000 0 13.46324 89.24656 38.17296
2011 1799 0.000003 0.000000 0 14.92649 69.94558 40.04702
2012 1745 0.000002 0.000000 0 18.08708 72.28814 53.45137
2013 1734 0.000002 0.000000 0 19.17204 65.86471 67.25574
2014 1766 0.000002 0.000000 0 20.55545 51.39029 147.47761
2015 1707 0.000002 0.000000 0 18.51468 44.89960 385.46640
2016 1665 0.000002 0.000000 0 19.91751 58.03819 83.49750
2017 1687 0.000002 0.000000 0 18.90784 53.19128 122.66264
2018 1683 0.000002 0.000000 0 21.62743 41.94694 96.22515
2019 1691 0.000002 0.000000 0 18.02467 82.23042 168.27690
Ullensvang:
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2020 5503 0.0449 0.1734 0.2241 13.9598 46.5101 86.8085 0.0032 0.0037 0.0026
2008 1837 0.1143 0.1121 0.1562 40.9390 130.4344 266.7888 0.0028 0.0009 0.0006
2009 1813 0.1147 0.1125 0.1655 39.6150 125.2846 275.6084 0.0029 0.0009 0.0006
2010 1827 0.1007 0.1007 0.1730 37.0701 125.5151 279.2786 0.0027 0.0008 0.0006
2011 1799 0.0923 0.1028 0.1723 36.3791 127.4180 283.9244 0.0025 0.0008 0.0006
2012 1745 0.0797 0.1020 0.1788 36.5731 132.3341 296.4275 0.0022 0.0008 0.0006
2013 1734 0.0761 0.1027 0.1834 36.6251 133.6770 302.9919 0.0021 0.0008 0.0006
2014 1766 0.0730 0.1025 0.1982 35.8788 122.1070 301.4253 0.0020 0.0008 0.0007
2015 1707 0.0785 0.1019 0.2097 37.4962 121.9725 317.1453 0.0021 0.0008 0.0007
2016 1665 0.0745 0.0955 0.1946 38.5844 124.4396 328.4414 0.0019 0.0008 0.0006
2017 1687 0.0765 0.0966 0.1980 37.5062 123.7872 327.8945 0.0020 0.0008 0.0006
2018 1683 0.0695 0.1016 0.1955 37.4938 125.2383 331.5597 0.0019 0.0008 0.0006
2019 1691 0.0792 0.0893 0.2040 37.6836 122.3193 332.9556 0.0021 0.0007 0.0006

3 Sysselsetting i ulike næringer, etter bosted (Modeller under arbeid)

Nå har vi sett på utviklingen av hvor mange som jobber i kommunene etter de 6 mest relevante næringene, fra 2008 til 2020, i regionene Haugalandet, Sunnhordland og Hardanger. Vi har også sett på Gini-koeffisientene og RDI-verdiene til utvalgte kommuner og næringer, samt problemstillingen ved disse verdiene i forhold til dataene våres og aggregeringsnivået vi har.

Videre skal vi nå se på utviklingen for hvor mange som bor i de ulike kommunene i regionene, som jobber innenfor de 6 mest relevante næringene, Gini-koeffisientene og RDI-verdiene for dette. Vi begynner med Haugalandet.

Haugalandet

Figuren viser at det er svingninger i antall ansatte i alle næringer for perioden, med et ca. Gjennomsnitt for perioden på 51.000 antall bosatte på Haugalandet som er sysselsatt i alle næringer. Svingningene varierer fra +/- 1.500 fra gjennomsnittet i perioden, det ser likevel ut til at svingene er stabile og normale ettersom det vil være naturlig med hensyn på at nye bedrifter starter opp i regionen, bedrifter som legger ned eller bedrifter som re-lokaliserer seg et annet sted.

Figuren viser en oversikt over antall ansatte i alle næringer etter kommuner på Haugalandet. Figuren viser at en rimelig stabil og relativt flat kurve for kommunene Utsira og Bokn, samt for Sauda og Vindafjord. For Tysvær viser figuren at det er litt mer svingninger, men de er lave sett i forhold til kommunene Karmøy og Haugesund. De to sistnevnte kommunene er de største i denne forbindelsen av antall ansatte i alle næringer, og de vil derfor også være mer utsatt for svingninger basert på at antall bedrifter er langt høyere, og da med hensyn på at bedrifter som starter opp, legger ned eller som re-lokaliserer seg.

Det vi imidlertid ser er at Haugesund og Karmøy er så store at det påvirker hvordan de mindre kommunene som Bokn, Tysvær, Sauda og Utsira blir fremstilt. Vi velger derfor å skille ut de store og mindre kommunene for seg som vist videre.

Denne figuren sammenligner antall ansatte i alle næringer for kommunene Haugesund, Karmøy og Vindafjord. Figuren viser at i året 2010, er det laveste året for perioden samlet for alle tre kommunene. Videre viser den at året 2014, var det høyeste året for perioden samlet for alle tre kommunene, og likedan viser figuren at fra 2014, har alle kommunene en nedgang frem til 2015-2016 før de tar seg opp igjen i 2018. Alle tre kommunene viser det samme mønsteret.

Denne figuren viser antall ansatte etter bosted i alle næringer for kommunene Bokn, Sauda, Tysvær og Utsira. Kommunene Bokn og Tysvær har siden 2008, hatt en gradvis, men noe ustabil økning i antall ansatte, mens kommunen Sauda og Utsira har hatt en gradvis nedgang i antall ansatte.

For å få en bedre oversikt over regionen så velger vi å se på utviklingen til næringene i kommunene, som vist på figurene under.

Figurene viser antall ansatte etter bosted, fordelt i ulike næringer for kommunene på Haugalandet for perioden 2008 – 2020. Helse- og sosialtjenester er en av de største næringene for alle kommunene og denne er gradvis økende for alle kommunene i perioden. Industri er også blant de største næringene for alle disse kommunene, og denne næringen er gradvis fallende for Haugesund, Karmøy har et enda større fall for denne næringen for perioden, da særlig i perioden 2008-2010. For Vindafjord er denne næringen gradvis økende frem til 2015, før den deretter gradvis faller igjen.

For Haugesund og Karmøy ser vi at næringen jordbruk og skogbruk er særlig lave i antall ansatte, men for Vindafjord er denne næringen betydelig høyere enn Haugesund og Karmøy. For næringen finansiering og forsikring er denne kurven lav og tilnærmet flat i alle kommunene for perioden, og det samme for næringen elektrisitet, vann og renovasjon. Bygg- og anleggsvirksomhet er også lav for Haugesund og Karmøy, men som jordbruk og skogbruk, er denne næringen høyere i Vindafjord sammenlignet mot kommunene Haugesund og Karmøy tatt i betraktning at Vindafjord har et betydelig lavere antall ansatte totalt enn Haugesund og Karmøy har.

Vi ser også samme trendene for de små kommunene på Haugalandet. Helse- og sosiale tjenester har estt en stabil vekst i Bokn, Sauda, Tysvær og utsira, mens industrien har, med unntak av bokn, sett en reduksjon i perioden 2008 - 2020. Utsira skiller seg og ut med å hatt en svak vekst i jordbruk, skogbruk og fiske i denne perioden.

Sunnhordland

Videre vil vi nå se på utviklingen for region Sunnhordland.

Denne figuren viser utviklingen av antall sysselsatte i alle næringer etter bosted i region Sunnhordland fra 2008 til 2020. Vi kan se utfra grafen at regionen hadde en kraftig vekst 2010 - 2014, før den falt kraftig i 2014 - 2016, før regionen igjen har sett en kraftig vekst 2016 - 2019. Ut fra grafen kan det se ut til at regionen igjen står ovenfor en ny reduksjon fra 2019 av.

Vi ønsker å se videre på utviklingen på kommunalt nivå, som vist i figur 24.

Vi ser ut fra grafen her at det er i hovedsak Stord, Kvinnherad og Bømlo som har sett den største svingningene i antall sysselsatte etter bosted. Men vi kan også klart se at disse 3 kommunene alle hadde et fall i 2014, som samsvarer med figur 23. Grafen er imidlertidig igjen ikke tydelig nok på grunn av de store kommunene, og vi fremstiller dermed grafene på kommunalt nivå her og for å tydeligjere utviklingen på kommunalt nivå.

Figur 25 og 26 viser her utviklingen i sysselsatte etter bosted i alle næringer på kommunalt nivå, men nå er hver kommune skilt fra hverandre og vi får et helt annet bilde. Vi ser nå reduksjonen i de tre store kommunene Stord, Kvinnherad og Bømlo mye mer tydelig og hvor drastisk denne reduksjonen har vært. Vi ser også nå at både Etne og Tysnes også har hatt en periode med kraftig reduksjon, med Etne 2014 - 2020 og Tysnes 2008 - 2012. Tysnes har sett en svak vekst fra 2012, mens fitjar såg sterk vekst 2009 - 2014 og har etter 2014 sett en svak reduksjon.

Vi er fortsatt ikke fornøyd, for vi ønsker å se på utviklingen til noen utvalgte næringer i kommunene, og ser dermed videre på figur 27 og 28.

Disse figurene, 27 og 28, viser utviklingen av sysselsatte etter bosted, på kommunalt nivå i Sunnhordlandsregionen 2008 - 2020.

Vi ser nå en trend for Stord, Bømlo og Kvinnherad. Alle disse tre kommunene hadde et kraftig fall i 2014. Kvinnherad hadde allerede en jevn reduksjon i industri frem til 2014, men hadde likevell et kraftig fall her, sammen med Stord og Bømlo. Reduksjonen i industri for Kvinnherad er mest sannsynelig stenging av “B-hallen” på Sør-Norge Aluminium AS i 2008 en av faktorene.

Vi såg akkuratt samme fallet når vi såg på sysselsetting etter arbeidssted tidlegere i rapporten. Dette kommer mest sannsynelig av olje-knekket i 2014. Aker Solutions, som det heter i dag, er blant Sunnhordlands største arbeidsplasser, og det er flere som pendler fra både Kvinnherad og Bømlo som jobber på Aker Solutions. Det er dermed naturlig at dårlige tider i olje-industrien vil påvirke Aker som igjen vil påvirke kommunene som har sysselsette i denne næringa. Vi ser enda et fall i Kvinnherad innen industri i 2016, og dette kommer mest sannsynelig av at Eide Marine Service på Halsnøy blei slått konkurs dette året.

Alle kommunene i region Sunnhordland har også sett en vekst innen helse- og sosialetjenester i perioden 2008 - 2020. Kvinnherad, Bømlo, Stord, Fitjar og Tysnes har sett en vekst innen jordbruk, skogbruk og fiske. Mest sannsynelig er fiske en stor del av veksten da Alsaker Fjordbruk har ekspandert i disse kommunene i denne perioden. Bygge- og Annleggsvirksomhet har også hatt en liten vekst i flere kommuner, mens finans relatert aktivitet har sett en jevn reduksjon i hele regionen.

Hardanger

Siste regionen vi ønsker å se på er Hardanger, mer spesifikt Odda frem til 2019 og Ullensvang frem til 2020. Vi har ikke tatt med Jondal i Hardanger frem til 2019. Igjen så ser vi nå på sysselsetting etter bosted.

Vi ser først på hele regionen samlet, jf. figur 29.

Denne figuren viser utviklingen i sysselsetting etter bosted, i hele regionen, og her er det noe som bør bemerkes. Først og fremst siden Jondal ikke var en del av dataene frem til 2019, men blir tatt med i Ullensvang i 2020 så vil vi se en unaturlig vekst i denne figuren i 2020. Dette er en svakhet i modellen og dataene våres. Det andre er at vi kan se en klar negativ utvikling i Hardanger frem til 2019.

For å illustrere utviklingen bedre, så skiller vi mellom Odda og Ullensvang ved neste figur.

Vi ser nå på denne figuren at både Odda og Ullensvang har hatt en negativ utvikling frem til og med 2019. Vi ser også problemstillingen med å ikke ta med Jondal under Hardanger kommer tydeligere frem nå med en ekstrem vekst etter sammenslåingen mellom Odda, Jondal og Ullensvang i 2020. Før vi velger å se på utvalgte næringer i hver kommune, velger vi først å dele kommunene opp hver for seg, slik at vi kan se utviklingen mer drastisk.

Vi ser her tydelig utviklingen til spessielt Odda, som berre stuper ned, uten tegn til å snu med det første. For å se utviklingen tydligere så deler vi igjen opp i noen utvalgte næringer i hver kommune, jf. figur 32.

Vi ser på denne figuren utviklingen av 6 ulike næringar, med hensyn på syssselsetting etter bosted, i Hardanger i denne perioden. Vi ser samme trender her i Hardanger som vi gjore for både Sunnhordland og Haugalandet: reduksjon i industri og primærnæringane, mens vi ser en vekst i helsetjenester. Det som er litt interessant å bemerke er at Odda såg en vekst i industri fra 2016 til 2019, men grunna sammenslåingen er det vanskelig å si noe om utviklingen for Odda spesifikt i 2020. Igjen så ser vi også samme ekstreme vekst i Ullensvang i 2020 som kommer av sammenslåingen.

Odda er kjent lokalt for sin aldrende befolkning, som mest sannsynelig er en viktig faktor for hvorfor Odda har sett så kraftig reduksjon i sysselsetting etter bosted, samtidig som kommunen har sett en vekst i helsetjenester.

3.1 Lokaliseringskvotienter (Dette er >EGENTLIG< Oppgåve 2 som blir gjort her. Denne og Gini/RDI for oppgåve 2 bør bli byttast om)

Lokaliseringskvotienter for regionene samlet

Nå har vi illustert og sett på grafene for utviklingen i de tre regionene, med hensyn på sysselsetting etter arbeidssted. Videre i rapporten skal vi nå se på Gini-koeffisientene og den regionelle diversifiserings indeksen (RDI) for å vurdere hvor spredt eller konsentrert, samt spesialisert utvlagt næringer er i utvalgte kommuner i regionene.

Haugalandet 2008-2020

Første vi ser på er Haugalandet.

Lokalkvotient, region: Haugalandet
År Alle Jordbruk Industri Vann Bygg Finans Underv. Helse
2008 47530 1.119704 1.554904 1.324259 1.034015 0.478239 0.976777 1.067222
2009 47013 1.112960 1.545231 1.296849 1.081408 0.461139 1.018320 1.062300
2010 47176 1.141404 1.562649 1.291317 1.083812 0.448764 1.023945 1.046187
2011 48276 1.158426 1.549389 1.285972 1.159864 0.414424 0.998825 1.053016
2012 48708 1.118550 1.589139 1.315407 1.084572 0.409678 1.023491 1.042421
2013 49011 1.091439 1.591393 1.412249 1.120150 0.391528 1.009710 1.045053
2014 49518 1.058402 1.562162 1.313866 1.099823 0.366871 1.018913 1.061882
2015 48043 1.134523 1.631864 1.186039 1.108163 0.373969 0.995335 1.084243
2016 47923 1.153958 1.656042 1.276847 1.072508 0.365711 1.010343 1.074402
2017 48957 1.119450 1.664917 1.303520 1.074360 0.352908 0.993198 1.071072
2018 48964 1.136670 1.676481 1.253354 1.057314 0.328343 1.000578 1.088475
2019 49295 1.115347 1.712062 1.350592 1.023920 0.313572 0.979734 1.088809
2020 48971 1.118823 1.757280 1.335762 1.020500 0.285671 0.975648 1.074677

Vi

Haugalandet
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2008 47530 0.000005 0.000109 0.000002 274.7795 17.77925 78.63547
2009 47013 0.000005 0.000105 0.000001 293.7259 19.11604 81.77438
2010 47176 0.000007 0.000111 0.000001 247.7570 19.68778 109.06295
2011 48276 0.000009 0.000107 0.000001 238.6734 20.33580 94.71229
2012 48708 0.000005 0.000123 0.000001 333.7480 19.17184 119.48788
2013 49011 0.000003 0.000122 0.000001 448.6259 19.17766 112.38161
2014 49518 0.000001 0.000110 0.000001 714.4856 20.33440 81.50790
2015 48043 0.000006 0.000137 0.000002 304.6451 19.05942 57.91832
2016 47923 0.000008 0.000145 0.000002 265.2847 19.13503 64.89427
2017 48957 0.000005 0.000151 0.000002 345.2287 19.21707 68.11217
2018 48964 0.000006 0.000152 0.000003 310.3869 18.99569 54.83235
2019 49295 0.000004 0.000168 0.000003 372.3899 18.05936 54.69338
2020 48971 0.000005 0.000191 0.000002 354.1514 17.11931 63.77723

Kommunenivå på Haugalandet (Haugesund, Karmøy, Tysvær og Bokn)

Haugesund
Haugesund: Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2008 21322 0.000056 0.000003 0.000003 37.13085 51.90441 27.39294
2009 21160 0.000058 0.000005 0.000002 37.07407 39.19908 29.73809
2010 21233 0.000055 0.000006 0.000002 39.75675 37.30323 28.81800
2011 21734 0.000056 0.000008 0.000002 42.71715 33.19959 27.01155
2012 21986 0.000055 0.000013 0.000002 45.17553 26.83008 31.29721
2013 22143 0.000054 0.000014 0.000002 47.23484 25.97054 32.38889
2014 22190 0.000053 0.000010 0.000002 48.05306 29.95301 31.85500
2015 21328 0.000048 0.000008 0.000004 48.42594 35.54632 20.83248
2016 21056 0.000049 0.000006 0.000004 46.94366 40.59506 19.95813
2017 21372 0.000049 0.000004 0.000004 47.67733 48.86069 19.46260
2018 21346 0.000048 0.000005 0.000004 48.71313 45.72239 18.29265
2019 21429 0.000042 0.000006 0.000005 52.28071 42.46819 17.91328
2020 20852 0.000042 0.000009 0.000006 50.54825 34.09645 15.62150
Haugesund: Lokalkvotient
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2008 21322 0.0035 0.1206 0.2257 0.0304 0.1014 0.1892 0.1142 1.1901 1.1930
2009 21160 0.0032 0.1215 0.2299 0.0301 0.0959 0.1963 0.1051 1.2659 1.1713
2010 21233 0.0034 0.1171 0.2332 0.0285 0.0903 0.1985 0.1188 1.2970 1.1748
2011 21734 0.0030 0.1196 0.2362 0.0264 0.0895 0.1992 0.1148 1.3365 1.1859
2012 21986 0.0031 0.1258 0.2292 0.0253 0.0885 0.1973 0.1242 1.4210 1.1620
2013 22143 0.0032 0.1267 0.2284 0.0244 0.0882 0.1975 0.1315 1.4367 1.1563
2014 22190 0.0032 0.1209 0.2297 0.0240 0.0875 0.1983 0.1316 1.3816 1.1583
2015 21328 0.0038 0.1112 0.2530 0.0244 0.0830 0.2050 0.1537 1.3388 1.2342
2016 21056 0.0032 0.1043 0.2572 0.0245 0.0797 0.2071 0.1300 1.3092 1.2419
2017 21372 0.0033 0.0987 0.2580 0.0242 0.0783 0.2066 0.1351 1.2615 1.2487
2018 21346 0.0030 0.0997 0.2608 0.0236 0.0778 0.2061 0.1292 1.2810 1.2652
2019 21429 0.0042 0.1013 0.2617 0.0233 0.0778 0.2059 0.1784 1.3028 1.2712
2020 20852 0.0040 0.1065 0.2740 0.0238 0.0771 0.2100 0.1675 1.3802 1.3049
Bokn
Bokn: Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2008 297 0.000000 0 0 7.076400 27.257803 16.671775
2009 296 0.000000 0 0 5.910691 25.516477 15.662416
2010 291 0.000000 0 0 6.368490 61.520893 11.094044
2011 293 0.000001 0 0 4.945050 61.369773 20.002312
2012 317 0.000000 0 0 7.206500 13.822168 9.198901
2013 327 0.000001 0 0 6.669571 12.992720 9.501377
2014 327 0.000000 0 0 7.943936 12.876975 9.298032
2015 301 0.000001 0 0 6.186378 27.348391 12.913202
2016 306 0.000001 0 0 5.718786 16.430315 24.241213
2017 311 0.000001 0 0 4.679622 24.563927 19.739049
2018 291 0.000001 0 0 5.005148 14.296613 18.169639
2019 327 0.000001 0 0 5.506238 12.306611 13.810143
2020 323 0.000001 0 0 5.444641 8.481016 22.776035
Bokn: Lokalkvotient
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2008 297 0.1717 0.1380 0.2492 0.0304 0.1014 0.1892 5.6481 1.3619 1.3171
2009 296 0.1993 0.1351 0.2601 0.0301 0.0959 0.1963 6.6134 1.4085 1.3253
2010 291 0.1856 0.1065 0.2887 0.0285 0.0903 0.1985 6.5011 1.1801 1.4540
2011 293 0.2287 0.1058 0.2491 0.0264 0.0895 0.1992 8.6465 1.1820 1.2510
2012 317 0.1640 0.1609 0.3060 0.0253 0.0885 0.1973 6.4903 1.8172 1.5510
2013 327 0.1743 0.1651 0.3028 0.0244 0.0882 0.1975 7.1506 1.8729 1.5329
2014 327 0.1498 0.1651 0.3058 0.0240 0.0875 0.1983 6.2528 1.8877 1.5425
2015 301 0.1860 0.1196 0.2824 0.0244 0.0830 0.2050 7.6245 1.4404 1.3778
2016 306 0.1993 0.1405 0.2484 0.0245 0.0797 0.2071 8.1419 1.7640 1.1992
2017 311 0.2379 0.1190 0.2572 0.0242 0.0783 0.2066 9.8122 1.5202 1.2452
2018 291 0.2234 0.1478 0.2612 0.0236 0.0778 0.2061 9.4754 1.8988 1.2670
2019 327 0.2049 0.1590 0.2783 0.0233 0.0778 0.2059 8.8010 2.0449 1.3517
2020 323 0.2074 0.1950 0.2539 0.0238 0.0771 0.2100 8.7289 2.5286 1.2091
Tysvær
Tysvær: Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2008 4048 0.000005 0.000000 0 23.14053 28.44557 60.22646
2009 4160 0.000004 0.000000 0 26.56107 32.21553 288.05235
2010 4232 0.000004 0.000000 0 28.36420 32.54334 140.40076
2011 4475 0.000003 0.000000 0 37.09019 30.12544 69.69579
2012 4423 0.000003 0.000000 0 41.25469 32.86191 81.01951
2013 4281 0.000003 0.000000 0 40.91130 31.37139 108.33505
2014 4329 0.000002 0.000000 0 50.18786 27.27801 266.05933
2015 4304 0.000002 0.000000 0 47.30815 115.11899 178.49305
2016 4314 0.000002 0.000000 0 48.81444 93.07896 47.15291
2017 4576 0.000001 0.000000 0 60.98597 38.81984 41.12099
2018 4620 0.000001 0.000002 0 63.20902 17.20843 39.04414
2019 4710 0.000002 0.000001 0 57.19657 18.78513 37.18022
2020 4773 0.000002 0.000002 0 52.69564 18.16005 30.17849
Tysvær:
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2008 4048 0.0736 0.0662 0.2058 0.0304 0.1014 0.1892 2.4214 0.6532 1.0878
2009 4160 0.0678 0.0649 0.1998 0.0301 0.0959 0.1963 2.2492 0.6765 1.0177
2010 4232 0.0638 0.0595 0.1914 0.0285 0.0903 0.1985 2.2351 0.6596 0.9641
2011 4475 0.0534 0.0563 0.1848 0.0264 0.0895 0.1992 2.0195 0.6291 0.9280
2012 4423 0.0495 0.0581 0.1849 0.0253 0.0885 0.1973 1.9591 0.6563 0.9374
2013 4281 0.0488 0.0563 0.1883 0.0244 0.0882 0.1975 2.0027 0.6385 0.9533
2014 4329 0.0439 0.0508 0.1945 0.0240 0.0875 0.1983 1.8314 0.5809 0.9810
2015 4304 0.0455 0.0743 0.1993 0.0244 0.0830 0.2050 1.8663 0.8954 0.9727
2016 4314 0.0450 0.0904 0.1859 0.0245 0.0797 0.2071 1.8367 1.1349 0.8976
2017 4576 0.0406 0.1040 0.1823 0.0242 0.0783 0.2066 1.6762 1.3292 0.8823
2018 4620 0.0394 0.1359 0.1805 0.0236 0.0778 0.2061 1.6711 1.7467 0.8757
2019 4710 0.0408 0.1310 0.1790 0.0233 0.0778 0.2059 1.7510 1.6846 0.8694
2020 4773 0.0427 0.1322 0.1768 0.0238 0.0771 0.2100 1.7986 1.7139 0.8422
Karmøy
Karmøy: Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2008 15194 0 0.000050 0 1509.3934 8.362457 147.01532
2009 14666 0 0.000034 0 734.1861 10.484147 2350.38157
2010 14591 0 0.000030 0 478.1462 11.637387 162.80094
2011 14781 0 0.000025 0 1145.2857 12.830825 2336.42034
2012 14989 0 0.000022 0 1523.9630 13.866661 533.30920
2013 15239 0 0.000020 0 1052.0677 14.891209 1961.40912
2014 15457 0 0.000019 0 462.4307 15.444220 158.56014
2015 15066 0 0.000024 0 545.3588 14.335219 238.40625
2016 15287 0 0.000028 0 2097.3333 13.957658 18005.30828
2017 15728 0 0.000033 0 457.2313 13.160277 302.51080
2018 15866 0 0.000032 0 990.6502 13.396798 598.32510
2019 15978 0 0.000034 0 371.7538 12.953569 1681.65208
2020 16059 0 0.000035 0 368.1716 13.042606 98.03155
Karmøy: Lokalkvotient
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2008 15194 0.0311 0.2209 0.1824 0.0304 0.1014 0.1892 1.0218 2.1798 0.9640
2009 14666 0.0315 0.1913 0.1967 0.0301 0.0959 0.1963 1.0452 1.9941 1.0022
2010 14591 0.0306 0.1762 0.1924 0.0285 0.0903 0.1985 1.0733 1.9519 0.9691
2011 14781 0.0256 0.1674 0.1996 0.0264 0.0895 0.1992 0.9670 1.8707 1.0021
2012 14989 0.0246 0.1607 0.1954 0.0253 0.0885 0.1973 0.9740 1.8145 0.9905
2013 15239 0.0234 0.1553 0.1970 0.0244 0.0882 0.1975 0.9610 1.7616 0.9974
2014 15457 0.0218 0.1522 0.2046 0.0240 0.0875 0.1983 0.9098 1.7402 1.0318
2015 15066 0.0226 0.1528 0.2091 0.0244 0.0830 0.2050 0.9249 1.8401 1.0205
2016 15287 0.0240 0.1513 0.2072 0.0245 0.0797 0.2071 0.9805 1.8994 1.0003
2017 15728 0.0221 0.1542 0.2033 0.0242 0.0783 0.2066 0.9098 1.9709 0.9840
2018 15866 0.0226 0.1525 0.2078 0.0236 0.0778 0.2061 0.9572 1.9592 1.0081
2019 15978 0.0206 0.1550 0.2053 0.0233 0.0778 0.2059 0.8845 1.9927 0.9971
2020 16059 0.0210 0.1538 0.1998 0.0238 0.0771 0.2100 0.8857 1.9940 0.9514

Sunnhordland 2008-2020

  • Eir_Er_Jordbruk = Samlet sysselsetting i region Sunnhordland
  • Eir_Er_Industri = Samlet sysselsetting innen Industri-sektoren i region Sunnhordland
  • Eir_Er_El_Vann_Reno = Samlet sysselsetting innen Eleketrisitet, Vann og Renovasjon-sektoren i region Sunnhordland
  • Eir_Er_Bygg_og_Anlegg = Samlet sysselsetting innen Bygge- og Anleggsvirksomhet-sektoren i region Sunnhordland
  • Eir_Er_Finans = Samlet sysselsetting innen Finansiering og Forsikring-sektoren i region Sunnhordland
  • Eir_Er_Undervisning = Samlet sysselsetting innen Undervisning-sektoren i region Sunnhordland
  • Eir_Er_Helse = Samlet sysselsetting innen Helse- og Sosialtjenester-sektoren i region Sunnhordland
Lokalkvotienten, region: Sunnhordland
År Alle Jordbruk Industri Vann Bygg Finans Underv. Helse
2008 25705 1.889972 2.195382 1.484363 1.083148 0.434388 1.089828 1.041584
2009 25579 1.910666 2.233340 1.525470 1.115557 0.424754 1.075178 1.062967
2010 25164 2.024283 2.221714 1.509915 1.085467 0.433772 1.111392 1.094565
2011 25567 2.216937 2.189706 1.525894 1.103190 0.363964 1.102301 1.112784
2012 25340 2.157861 2.314692 1.566576 1.055782 0.337189 1.098104 1.138181
2013 25745 2.192507 2.339675 1.479538 1.063778 0.326357 1.103272 1.114116
2014 26116 2.174582 2.358381 1.506935 1.088985 0.317935 1.097019 1.088498
2015 25437 2.184669 2.410769 1.477278 1.133049 0.313919 1.096199 1.099483
2016 24932 2.281968 2.294976 1.347791 1.130956 0.247292 1.120194 1.141996
2017 25165 2.420350 2.327061 1.297287 1.144273 0.258333 1.085444 1.123609
2018 25417 2.491799 2.447492 1.237598 1.157433 0.254865 1.062711 1.126689
2019 25530 2.468210 2.493299 1.117161 1.143978 0.228478 1.041640 1.132222
2020 25379 2.485516 2.481565 1.235508 1.132568 0.000000 1.029554 1.125044
Region: Sunnhordland
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2008 25705 0.000082 0.000148 0.000000 36.95866 8.253249 127.11741
2009 25579 0.000087 0.000160 0.000000 36.43396 8.450759 80.90815
2010 25164 0.000105 0.000149 0.000001 34.20318 9.067027 53.26739
2011 25567 0.000147 0.000141 0.000001 31.07158 9.390777 44.52110
2012 25340 0.000128 0.000166 0.000002 34.17163 8.591273 36.68228
2013 25745 0.000137 0.000173 0.000001 34.39969 8.465892 44.36885
2014 26116 0.000134 0.000179 0.000001 35.52557 8.415335 56.99419
2015 25437 0.000135 0.000191 0.000001 34.59352 8.536449 49.04572
2016 24932 0.000150 0.000153 0.000002 31.85946 9.693915 34.00274
2017 25165 0.000182 0.000159 0.000001 29.03348 9.628618 39.16291
2018 25417 0.000200 0.000188 0.000001 28.43591 8.877574 38.29273
2019 25530 0.000191 0.000198 0.000002 29.25598 8.611390 36.73580
2020 25379 0.000198 0.000197 0.000001 28.32775 8.750280 38.08834

Kommunenivå i Sunnhordland (Stord, Kvinnherad, Bømlo og Sveio)

Stord
Stord: Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2020 9301 0.000010 0.000029 0.000001 37.99855 6.704646 22.77044
2008 9629 0.000009 0.000054 0.000000 42.56625 5.470563 97.20628
2009 9523 0.000008 0.000054 0.000000 45.60307 5.691097 346.52613
2010 9161 0.000007 0.000042 0.000000 49.71333 6.164777 50.45615
2011 9228 0.000008 0.000044 0.000000 51.48673 6.103206 38.06090
2012 9354 0.000007 0.000047 0.000000 54.69384 5.934359 40.75037
2013 9685 0.000008 0.000059 0.000000 54.68658 5.438690 82.18451
2014 9938 0.000009 0.000083 0.000000 53.00341 5.047778 195.58373
2015 9656 0.000009 0.000084 0.000000 51.52101 5.074613 204.97716
2016 9188 0.000007 0.000056 0.000000 53.16954 5.927978 34.80295
2017 9409 0.000007 0.000053 0.000000 55.41152 6.195044 42.09682
2018 9462 0.000008 0.000055 0.000000 54.29113 6.068518 37.40030
2019 9456 0.000008 0.000062 0.000000 51.75478 5.816923 47.85938
Stord: Lokalkvotient
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2020 9301 0.0041 0.2505 0.2331 0.0304 0.1014 0.1892 0.1344 2.4715 1.2321
2008 9629 0.0066 0.2787 0.1860 0.0301 0.0959 0.1963 0.2205 2.9052 0.9476
2009 9523 0.0066 0.2660 0.2014 0.0285 0.0903 0.1985 0.2318 2.9464 1.0145
2010 9161 0.0063 0.2517 0.2190 0.0264 0.0895 0.1992 0.2394 2.8123 1.0995
2011 9228 0.0059 0.2524 0.2236 0.0253 0.0885 0.1973 0.2315 2.8506 1.1332
2012 9354 0.0061 0.2567 0.2220 0.0244 0.0882 0.1975 0.2500 2.9112 1.1242
2013 9685 0.0057 0.2713 0.2104 0.0240 0.0875 0.1983 0.2370 3.1018 1.0614
2014 9938 0.0055 0.2811 0.1998 0.0244 0.0830 0.2050 0.2268 3.3858 0.9751
2015 9656 0.0051 0.2767 0.2120 0.0245 0.0797 0.2071 0.2073 3.4738 1.0236
2016 9188 0.0054 0.2470 0.2353 0.0242 0.0783 0.2066 0.2244 3.1555 1.1391
2017 9409 0.0055 0.2392 0.2299 0.0236 0.0778 0.2061 0.2344 3.0743 1.1152
2018 9462 0.0049 0.2425 0.2326 0.0233 0.0778 0.2059 0.2088 3.1190 1.1299
2019 9456 0.0044 0.2490 0.2309 0.0238 0.0771 0.2100 0.1869 3.2287 1.0995
Kvinnherad
Kvinnherad: Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2020 5808 0.000010 0.000003 0.000001 24.25832 13.720804 12.14397
2008 6084 0.000015 0.000009 0.000000 21.22582 8.308388 26.59281
2009 6021 0.000018 0.000009 0.000000 19.92804 8.758368 27.65694
2010 5954 0.000022 0.000005 0.000000 18.63318 11.274955 25.52672
2011 6029 0.000029 0.000005 0.000000 17.04930 11.839721 22.11922
2012 5746 0.000022 0.000007 0.000000 19.03101 9.307269 17.67240
2013 5737 0.000024 0.000005 0.000000 18.35762 10.883476 21.60194
2014 5792 0.000024 0.000005 0.000000 18.58380 11.916350 26.57873
2015 5555 0.000013 0.000003 0.000000 24.15315 14.372947 16.41151
2016 5493 0.000015 0.000003 0.000001 21.98988 16.391508 13.65431
2017 5472 0.000019 0.000003 0.000000 19.89773 16.277446 17.42407
2018 5622 0.000019 0.000006 0.000000 20.50960 11.049327 17.70374
2019 5749 0.000016 0.000007 0.000000 22.42343 10.836029 18.08339
Kvinnherad: Lokalkvotient
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2020 5808 0.0716 0.1742 0.2715 0.0304 0.1014 0.1892 2.3559 1.7190 1.4353
2008 6084 0.0773 0.2163 0.2339 0.0301 0.0959 0.1963 2.5632 2.2545 1.1916
2009 6021 0.0787 0.2045 0.2347 0.0285 0.0903 0.1985 2.7580 2.2648 1.1821
2010 5954 0.0801 0.1782 0.2383 0.0264 0.0895 0.1992 3.0293 1.9909 1.1967
2011 6029 0.0839 0.1730 0.2425 0.0253 0.0885 0.1973 3.3207 1.9540 1.2292
2012 5746 0.0769 0.1956 0.2541 0.0244 0.0882 0.1975 3.1555 2.2186 1.2865
2013 5737 0.0784 0.1794 0.2446 0.0240 0.0875 0.1983 3.2730 2.0503 1.2335
2014 5792 0.0782 0.1670 0.2426 0.0244 0.0830 0.2050 3.2052 2.0106 1.1836
2015 5555 0.0659 0.1492 0.2680 0.0245 0.0797 0.2071 2.6910 1.8734 1.2942
2016 5493 0.0697 0.1393 0.2798 0.0242 0.0783 0.2066 2.8753 1.7795 1.3545
2017 5472 0.0738 0.1393 0.2635 0.0236 0.0778 0.2061 3.1319 1.7894 1.2784
2018 5622 0.0720 0.1683 0.2624 0.0233 0.0778 0.2059 3.0943 2.1638 1.2744
2019 5749 0.0684 0.1694 0.2653 0.0238 0.0771 0.2100 2.8767 2.1964 1.2634
Bømlo
Bømlo: Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2020 4890 0.000006 0.000006 0 25.55762 8.078003 196.17864
2008 4845 0.000006 0.000012 0 27.22297 5.780605 29.90455
2009 4831 0.000007 0.000014 0 25.95855 5.765718 50.29328
2010 4819 0.000008 0.000011 0 25.69390 6.261174 100.99321
2011 4865 0.000007 0.000010 0 27.79351 6.878525 1742.61665
2012 4885 0.000007 0.000010 0 28.25052 6.652753 259.71678
2013 4872 0.000008 0.000010 0 27.48769 6.815899 257.41825
2014 4890 0.000009 0.000011 0 25.78040 6.839606 201.94263
2015 4695 0.000009 0.000012 0 25.10064 6.440352 159.69387
2016 4662 0.000010 0.000010 0 22.74721 6.987961 172.36852
2017 4790 0.000013 0.000010 0 20.90942 7.125392 235.15014
2018 4885 0.000013 0.000010 0 21.87900 7.171995 154.05849
2019 4887 0.000010 0.000013 0 23.85442 6.568229 73.93914
Bømlo: Lokalkvotient
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2020 4890 0.0695 0.2252 0.1943 0.0304 0.1014 0.1892 2.2870 2.2213 1.0269
2008 4845 0.0669 0.2689 0.1628 0.0301 0.0959 0.1963 2.2188 2.8030 0.8296
2009 4831 0.0671 0.2637 0.1786 0.0285 0.0903 0.1985 2.3496 2.9212 0.8998
2010 4819 0.0654 0.2492 0.1893 0.0264 0.0895 0.1992 2.4716 2.7844 0.9503
2011 4865 0.0613 0.2339 0.1967 0.0253 0.0885 0.1973 2.4236 2.6420 0.9971
2012 4885 0.0598 0.2385 0.1937 0.0244 0.0882 0.1975 2.4521 2.7048 0.9805
2013 4872 0.0603 0.2342 0.1944 0.0240 0.0875 0.1983 2.5180 2.6771 0.9804
2014 4890 0.0632 0.2292 0.2000 0.0244 0.0830 0.2050 2.5897 2.7608 0.9758
2015 4695 0.0643 0.2349 0.2009 0.0245 0.0797 0.2071 2.6272 2.9492 0.9698
2016 4662 0.0682 0.2214 0.2008 0.0242 0.0783 0.2066 2.8129 2.8285 0.9719
2017 4790 0.0714 0.2182 0.2019 0.0236 0.0778 0.2061 3.0288 2.8034 0.9794
2018 4885 0.0690 0.2172 0.1994 0.0233 0.0778 0.2059 2.9632 2.7930 0.9685
2019 4887 0.0657 0.2294 0.1964 0.0238 0.0771 0.2100 2.7641 2.9738 0.9356
Sveio
Sveio: Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2020 1494 0.000003 0 0 11.101299 14.44421 10.643292
2008 1362 0.000004 0 0 9.268448 16.47379 15.538063
2009 1387 0.000005 0 0 9.041156 18.44149 12.884239
2010 1357 0.000004 0 0 10.118403 19.53600 12.035476
2011 1358 0.000005 0 0 9.451718 20.50383 12.448791
2012 1386 0.000007 0 0 8.338691 17.06779 10.097705
2013 1448 0.000006 0 0 9.089835 16.90197 9.855809
2014 1439 0.000004 0 0 11.615431 18.57039 10.575112
2015 1519 0.000009 0 0 8.131317 18.52367 14.144191
2016 1516 0.000006 0 0 9.344323 17.10219 12.242172
2017 1495 0.000008 0 0 8.603933 20.95586 14.125978
2018 1516 0.000006 0 0 9.674145 20.51681 13.922231
2019 1523 0.000006 0 0 9.412380 21.92055 16.163512
Sveio: Lokalkvotient
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2020 1494 0.1205 0.0321 0.2831 0.0304 0.1014 0.1892 3.9629 0.3170 1.4967
2008 1362 0.1380 0.0352 0.2606 0.0301 0.0959 0.1963 4.5798 0.3673 1.3279
2009 1387 0.1391 0.0360 0.2761 0.0285 0.0903 0.1985 4.8749 0.3993 1.3910
2010 1357 0.1253 0.0383 0.2822 0.0264 0.0895 0.1992 4.7370 0.4281 1.4172
2011 1358 0.1311 0.0398 0.2776 0.0253 0.0885 0.1973 5.1861 0.4491 1.4072
2012 1386 0.1443 0.0296 0.2965 0.0244 0.0882 0.1975 5.9195 0.3355 1.5014
2013 1448 0.1340 0.0283 0.2997 0.0240 0.0875 0.1983 5.5906 0.3237 1.5118
2014 1439 0.1105 0.0292 0.2995 0.0244 0.0830 0.2050 4.5282 0.3515 1.4614
2015 1519 0.1475 0.0257 0.2778 0.0245 0.0797 0.2071 6.0229 0.3223 1.3414
2016 1516 0.1313 0.0198 0.2883 0.0242 0.0783 0.2066 5.4131 0.2529 1.3954
2017 1495 0.1398 0.0301 0.2769 0.0236 0.0778 0.2061 5.9304 0.3868 1.3434
2018 1516 0.1266 0.0290 0.2777 0.0233 0.0778 0.2059 5.4401 0.3732 1.3489
2019 1523 0.1300 0.0315 0.2718 0.0238 0.0771 0.2100 5.4708 0.4086 1.2947

Hardanger 2008-2020

  • Eir_Er_Jordbruk = Samlet sysselsetting i region Hardanger
  • Eir_Er_Industri = Samlet sysselsetting innen Industri-sektoren i region Hardanger
  • Eir_Er_El_Vann_Reno = Samlet sysselsetting innen Eleketrisitet, Vann og Renovasjon-sektoren i region Hardanger
  • Eir_Er_Bygg_og_Anlegg = Samlet sysselsetting innen Bygge- og Anleggsvirksomhet-sektoren i region Hardanger
  • Eir_Er_Finans = Samlet sysselsetting innen Finansiering og Forsikring-sektoren i region Hardanger
  • Eir_Er_Undervisning = Samlet sysselsetting innen Undervisning-sektoren i region Hardanger
  • Eir_Er_Helse = Samlet sysselsetting innen Helse- og Sosialtjenester-sektoren i region Hardanger
Lokalkvotient, region: Hardanger
År Alle Jordbruk Industri Vann Bygg Finans Underv. Helse
2008 5135 1.518100 1.909755 2.907582 1.376094 0.427130 0.884404 1.157067
2009 5122 1.554667 1.979940 2.545477 1.383604 0.449655 0.890762 1.154779
2010 5139 1.513425 2.021896 2.581599 1.554267 0.464325 0.893592 1.137031
2011 5098 1.557582 2.040286 2.201409 1.589508 0.456329 0.855813 1.132693
2012 4924 1.478501 2.234202 2.274817 1.185114 0.388007 0.856853 1.251761
2013 4875 1.489409 2.175249 2.242757 1.189083 0.389177 0.887933 1.224510
2014 4834 1.450197 2.154293 2.457064 1.199360 0.230559 0.859059 1.238532
2015 4746 1.433416 2.230459 2.367917 1.328419 0.233681 0.908114 1.206948
2016 4779 1.290492 2.132946 2.247895 1.304873 0.143347 0.925712 1.215400
2017 4782 1.259036 2.257886 2.033545 1.313545 0.146969 0.932482 1.193518
2018 4743 1.278970 2.389604 1.933608 1.274556 0.148995 0.875547 1.186480
2019 4827 1.361498 2.445599 1.957901 1.251575 0.145010 0.870143 1.192431
2020 5291 1.741790 2.411015 1.949638 1.252472 0.000000 0.864612 1.135995
Region: Hardanger
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2008 5135 0.000001 0.000003 0 63.48614 10.844444 33.65492
2009 5122 0.000001 0.000004 0 59.81821 10.636025 32.91504
2010 5139 0.000001 0.000004 0 68.23538 10.839966 36.75996
2011 5098 0.000001 0.000004 0 67.81450 10.739610 37.84135
2012 4924 0.000001 0.000006 0 82.68730 9.151565 20.13343
2013 4875 0.000001 0.000005 0 83.81914 9.650327 22.55210
2014 4834 0.000001 0.000004 0 92.68767 9.903231 21.14541
2015 4746 0.000001 0.000005 0 94.55552 9.787370 23.57695
2016 4779 0.000000 0.000004 0 140.59861 11.080301 22.41532
2017 4782 0.000000 0.000005 0 159.19718 10.158127 25.01511
2018 4743 0.000000 0.000006 0 152.06158 9.247394 26.01495
2019 4827 0.000000 0.000007 0 118.82212 8.895534 25.24158
2020 5291 0.000002 0.000008 0 56.72945 9.187786 35.02128

Kommunenivå i Hardanger (Odda og Ullensvang)

Odda
Odda(-2019): Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2008 3740 0.000001 0.000004 0 51.44083 7.018043 20.49546
2009 3702 0.000001 0.000005 0 53.20802 6.987378 19.14744
2010 3644 0.000001 0.000005 0 56.04945 6.966969 20.63557
2011 3642 0.000001 0.000005 0 60.37978 6.910631 21.46311
2012 3652 0.000001 0.000006 0 72.60219 6.289313 15.31141
2013 3607 0.000001 0.000006 0 72.24299 6.464556 18.07099
2014 3536 0.000001 0.000005 0 68.34183 6.688456 18.04542
2015 3489 0.000001 0.000006 0 69.59185 6.744805 22.09307
2016 3540 0.000001 0.000005 0 67.20610 7.712344 18.26469
2017 3521 0.000001 0.000006 0 69.88471 7.106769 20.87707
2018 3508 0.000001 0.000007 0 72.03947 6.496193 22.35952
2019 3566 0.000001 0.000008 0 64.81373 6.036981 23.95814
Odda(-2019): Lokalkvotient
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2008 3740 0.0110 0.2439 0.2380 0.0304 0.1014 0.1892 0.3606 2.4058 1.2579
2009 3702 0.0113 0.2391 0.2485 0.0301 0.0959 0.1963 0.3764 2.4916 1.2661
2010 3644 0.0107 0.2338 0.2470 0.0285 0.0903 0.1985 0.3749 2.5900 1.2441
2011 3642 0.0099 0.2342 0.2457 0.0264 0.0895 0.1992 0.3738 2.6167 1.2339
2012 3652 0.0115 0.2475 0.2626 0.0253 0.0885 0.1973 0.4550 2.7959 1.3310
2013 3607 0.0105 0.2429 0.2528 0.0244 0.0882 0.1975 0.4322 2.7544 1.2802
2014 3536 0.0093 0.2370 0.2537 0.0240 0.0875 0.1983 0.3894 2.7091 1.2795
2015 3489 0.0100 0.2313 0.2502 0.0244 0.0830 0.2050 0.4111 2.7855 1.2208
2016 3540 0.0096 0.2093 0.2619 0.0245 0.0797 0.2071 0.3923 2.6277 1.2643
2017 3521 0.0099 0.2190 0.2545 0.0242 0.0783 0.2066 0.4099 2.7980 1.2319
2018 3508 0.0097 0.2318 0.2509 0.0236 0.0778 0.2061 0.4111 2.9781 1.2170
2019 3566 0.0079 0.2434 0.2476 0.0233 0.0778 0.2059 0.3373 3.1301 1.2027
Ullensvang
Ullensvang: Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2020 5291 0.000001 0.000003 0 91.002864 11.81813 20.26687
2008 1395 0.000004 0.000000 0 9.061056 26.90819 35.03107
2009 1420 0.000005 0.000000 0 9.017726 35.33227 34.71858
2010 1495 0.000004 0.000000 0 10.420845 31.26730 39.62045
2011 1456 0.000004 0.000000 0 10.612190 28.60060 45.15144
2012 1272 0.000003 0.000000 0 11.460270 30.17502 220.28207
2013 1268 0.000003 0.000000 0 11.674531 24.42023 81.25412
2014 1298 0.000003 0.000000 0 12.562003 37.31937 54.14553
2015 1257 0.000002 0.000000 0 12.541974 44.68168 30.91661
2016 1239 0.000002 0.000000 0 14.248799 47.71748 61.77963
2017 1261 0.000002 0.000000 0 15.515431 52.25725 54.66410
2018 1235 0.000002 0.000000 0 15.389743 45.67498 47.97606
2019 1261 0.000002 0.000000 0 13.268906 26.67736 33.86582
Ullensvang: Lokalkvotient
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2020 5291 0.0414 0.1860 0.2385 0.0304 0.1014 0.1892 1.3614 1.8348 1.2608
2008 1395 0.1405 0.0588 0.1677 0.0301 0.0959 0.1963 4.6617 0.6127 0.8546
2009 1420 0.1394 0.0620 0.1697 0.0285 0.0903 0.1985 4.8850 0.6865 0.8549
2010 1495 0.1224 0.0575 0.1739 0.0264 0.0895 0.1992 4.6285 0.6427 0.8733
2011 1456 0.1195 0.0536 0.1751 0.0253 0.0885 0.1973 4.7284 0.6051 0.8877
2012 1272 0.1116 0.0550 0.2020 0.0244 0.0882 0.1975 4.5795 0.6241 1.0230
2013 1268 0.1096 0.0465 0.2106 0.0240 0.0875 0.1983 4.5742 0.5319 1.0621
2014 1298 0.1040 0.0562 0.2234 0.0244 0.0830 0.2050 4.2624 0.6773 1.0901
2015 1257 0.1042 0.0573 0.2395 0.0245 0.0797 0.2071 4.2565 0.7190 1.1562
2016 1239 0.0944 0.0573 0.2228 0.0242 0.0783 0.2066 3.8941 0.7322 1.0784
2017 1261 0.0880 0.0587 0.2244 0.0236 0.0778 0.2061 3.7341 0.7541 1.0887
2018 1235 0.0883 0.0559 0.2267 0.0233 0.0778 0.2059 3.7911 0.7185 1.1012
2019 1261 0.0991 0.0397 0.2395 0.0238 0.0771 0.2100 4.1714 0.5140 1.1406

??Dette ferdig??

– Oppdatert LQ-verdiar

Nasjonalt?? (Dette kan kaaaaaaaaaaaaaaaaaaaaaaanskje bli tatt vekk. Det ser vi etter kvart)

Pendling

De ulike kommunene og regionene har ulike behov, for at regionene skal utvikle seg er pendling et viktig begrep for å tiltrekke seg arbeidskraft. Veldig mange kommuner har for lite arbeidsplasser i forhold til antall arbeidende innbyggere, som vil si at de fleste er avhengige av pendlere. Pendling kan være til andre kommuner i samme region eller til andre regioner. Alle kommuner har kanskje ikke arbeidsplasser innen alle fagfelt, arbeidstakere er derfor avhengig av å pendler til andre kommuner for å finne relevant arbeid. Det samme gjelder dersom arbeidstaker har tilhørighet til en kommune, men det ikke finnes relevant arbeid da er han også nødt til å søke jobb i andre kommuner. Her kommer begrepene innpendling og utpendling inn, som betyr at noen kommuner eller regioner har flere arbeidsplasser tilgjengelige enn de har innbyggere som kan jobbe innad i kommunen eller at de ikke har nok arbeidsplasser og innbyggerene er nødt til å søke jobb andre plasser. Vi skal se på innpendling og utpendling som vil kunne fortelle oss i hvilken grad et sted er integrert i et større arbeidsmarked https://regionalanalyse.no/rapport/3004/1/4.

Nedenfor vil vi først ta for oss regionen Haugalandet og Sunnhordland med Ullensvang, og se på disse regionene hver for seg. Så kommer en tabell som tar for seg disse regionene samlet. Vi ønsker først å skille disse to regionene for å se i hvilken kommune andelen av innpendling og utpendling er størst og minst. For så å se på pendlingen mellom regionene.

I radene sees pendling inn til kommunene. Nederste rad viser totalen av antall pendlere inn til den enkelte kommune. Her kan vi se en andel stillinger som er besatt av arbeidstakere fra andre kommuner i Haugalandsregionen.

I kolonnene ser man de som pendlere ut av hver enkelt kommune. Det vil si arbeidstakere som bor i en kommune, og som har arbeidsted i en annen kommune innenfor Hauglandsregionen.

De som er markert med gult er arbeidstakere som bor og jobber i samme kommune.

Hauglandsregionen:

Haugalandsregionen har 44119 arbeidsplasser, hvorav 13170 er pendlere.

Haugesund, Karmøy og Tysvær er de kommunene i regionen med høyest andel pendlere både når det gjelder inn- og utpendling. La oss se nærmere på Haugesund som har en stor del av arbeidstakerne i regionen. Det gjelder både når vi ser på innpendling, utpendling og de som bor og jobber i samme kommune. Ut ifra tabellen kan vi se at Haugesund har 11714 arbeidstakere som bor og jobber i kommunen. Fra Haugesund er det eksempelvis 1029 arbeidstakere som pendler til Tysvær og 2586 arbeidstakere som pendler til Karmøy. Til Sauda og Utsira er det en betydelig lavere andel som pendler. Grunnen til at det nok at det er mindre kommuner med færre arbeidsplasser. Mange av de som bor i distriktene som eksempelvis Sauda og Utsira jobber og bor i samme kommune. Vi kan se at i Sauda jobber og bor det 1789 arbeidstaker, mens de har 31 stykk som pendler inn til kommunen og 66 stykk som pendler ut av kommunen. Det kan være flere som pendler inn til og ut av kommunen fra andre regioner, men her ser vi tallene på de som pendler i Haugalandsregionen.

Vi vet at Haugesund er regionsentrum med sykehus og høgskole. Samtidig har Haugesund flere olje og sjøfartsnæringer. Det er sentralisert som betyr at det er grunnlag for et større jobbmarked. Det er årsaken til at Haugesund har mer innpendling enn de andre kommunene i regionen. Karmøy og Tysvær som ligger nærmest Haugesund har størst andel utpendling, også til Haugesund.

Sunnhordland

I Sunnhordlandsregionen er det 28275 arbeidstakere om har sin arbeidsplass, av disse er det 2575 som har sitt arbeid i en annen kommune enn den de bor i.

Som vi kan se er Stord den kommunen med flest arbeidstakere. Dette kan vi se i sammenheng med at Stord er som et sentrum for regionen. En del av de interkommunale samarbeidene har sine kontorer lokalisert på Stord. Stord har 7314 som både bor og arbeider innad i kommunen. Å av Stordabuen som pendler ut av kommunen er det flest som pendler til Bømlo og Fitjar. Dette gjelder også motsatt da Stord får flest innpendlere fra de samme kommunene. Stord og Ullensvang er de eneste kommunene som har flere som pendler inn enn ut.

I Etne er det ganske likt med inn og utpendlere da de har 66 som pendler ut og 61 som pendler inn til kommunen. Etne er også den kommunen som har minst arbeidere som driver med pendling.

Vi har valgt å ta med Ullensvang i Sunnhordlandsoversikten. Etne og Kvinnherad er begge nabokommuner til Ullensvang. Ullensvang har lite både inn og utpendling.

En samlet oversikt over Haugalandsregionen og Sunnhordlandsregionen

Vi har sett på inndelingene i de forskjellige regionene. Videre ønsker vi å se på regionene i en samlet tabell.

Vi har tidligere skrevet om at Haugalandsregionen har 13170 pendlere, mens Sunnhordlandsregionen og Ullensvang har 2575 pendlere. Om vi ser begge regionene samlet, øker antall pendlere med totalt 3311 arbeidstakere. Det vil si at det er 3311 stykker som pendler på tvers av regionene.

Utsira har ikke inn- eller utpendlere til Sunnhordland. Bortsett fra en person som pendler til Sveio har heller ikke Bokn utpendling til Sunnhordland.

Haugesund er den kommunen som har flest pendlere inn til kommunen. De ligger langt foran de andre kommunene når det er snakk om pendling inn til kommunene. Karmøy er den kommunen som har flest innbyggere som pendler ut av kommunen.

Videre kan man se på de systematiske forskjellene sett i forhold til sentralitet og tilgjengelighet i det lokale arbeidsmarkedet.

Haugesund, Karmøy og Stord er sentrale kommuner hvor det finnes en stor andel arbeidsplasser og tilgjengeligheten i arbeidsmarkedet er større enn i eksempelvis Sauda, Utsira, Tysnes eller Ullensvang. De sentraliserte kommunene har en fordel i forhold til å skape klynger, det med tanke på at når flere mennesker bosetter seg i samme område kan en dra nytte av kompetansen de innehar. Sauda, Utsira, Tysnes og Ullensvang er eksempler på kommuner i utkanten av regionene. De befinner seg såpass langt utenfor at de ikke vil dra nytte av sentralitet.

I figur 3 og 4 vises det at de siste 10 årene har Haugesund hatt en reduksjon i antall ansatte, men Karmøy, Vindafjord og Tysvær har hatt en markant økning i antall arbeidstakere. Det vi vet er at det har utviklet seg større næringsklynger utenfor Haugesund de siste årene som kan ha en sammenheng med økning i antall ansatte. Samtidig har oljebransjen i samme periode slitt med nedgangstider som påvirker både Haugesund og Stord. Disse kommunene har en del oljebaserte næringer og i de periodene oljemarkedet svinger vil arbeidsmarkedet vise markant nedgang i antall arbeidsplasser. Det vil også vise en betydelig økning i antall arbeidsplasser om det er oppgangstider. Oppgangstider i oljenæringen gir en økning av pendlere inn til kommuner som har virksomheter innenfor oljenæringen.

LS0tCnRpdGxlOiAiQXJiZWlkc2tyYXYgdsOlcmVuIDIwMjIiCmF1dGhvcjoKLSBLZXZpbiBIYQotIE9sYSBBbmRyZSBPbG9mc3NvbgotIEFubiBFbGlzYWJldGggSmFjb2JzZW4KLSBIZWlkaSBNYXJpZSBSb2xmc25lcwotIERhbmllbCBLYXJzdGFkCi0gSGVucmlldHRlIEhhbnNlbgotIFN1c2FubiBCaXJrZWxhbmQgU2l2ZXJ0c2VuCi0gVmlsZGUgSGF1Z2xhbmQKc3VidGl0bGU6IE1TQjEwNiwgQW52ZW5kdCBieS0gb2cgcmVnaW9uYWzDuGtvbm9taQpvdXRwdXQ6CiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAogIGh0bWxfZG9jdW1lbnQ6CiAgICBkZl9wcmludDogcGFnZWQKbGFuZzogbm8tTkIKZWRpdG9yX29wdGlvbnM6IAogIG1hcmtkb3duOiAKICAgIHdyYXA6IHNlbnRlbmNlCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CnN1cHByZXNzUGFja2FnZVN0YXJ0dXBNZXNzYWdlcyh7CiAgbGlicmFyeShyZWFkcikKICBsaWJyYXJ5KGdncGxvdDIpCiAgbGlicmFyeShrbml0cikKICBsaWJyYXJ5KHZpcmlkaXMpCiAgbGlicmFyeSh0aWR5dmVyc2UpCiAgbGlicmFyeShrYWJsZUV4dHJhKQogIG9wdGlvbnMoc2NpcGVuID0gOTk5KQogIH0pCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvPUZBTFNFLCBpbmNsdWRlID0gVFJVRSkKYGBgCgojIFJvbWxpZ2UgZm9yc2tqZWxsZXIgaSBuw6ZyaW5nc3N0cnVrdHVyLCB2aXJrbmluZ2VyIGF2IGVrc29nZW5lIHNqb2trIGkgYmFzaXNzeXNzZWxzZXR0aW5nZW4sIG9nIGxva2FsZSBmb3Jza2plbGxlciBJIHN5c3NlbHNldHRpbmdzdmVrc3QuCgpJIGRlbm5lIG9wcGdhdmVuIHZpbCB2aSBzZSBww6UgbsOmcmluZ3NzdHJ1a3R1cmVyIHDDpSBIYXVnYWxhbmRldCwgU3VubmhvcmRsYW5kIG9nIFVsbGVuc3ZhbmcuCgpQcm9ibGVtc3RpbGxpbmdlciBvZyBiZXJlZ25pbmdlciB2aSB2aWwgc2UgbsOmcm1lcmUgcMOlCgotICAgQmVza3JpdmUgc2l0dWFzam9uZW4gc2xpayBkZW4gZXIgZm9yIDIwMjAsIG9nIGZvciB1dHZpa2xpbmdlbiBvdmVyIHRpZC4KLSAgIFN5c3NlbHNldHRpbmdzdXR2aWtsaW5nZW4gZm9yIHVsaWtlIG7DpnJpbmdlciBpIHVsaWtlIGtvbW11bmVyIG9nIGZvciByZWdpb25lbiBzYW1sZXQuCi0gICBBbmRlbGVuIGF2IHN5c3NlbHNldHRpbmdlbiBpbm5lbmZvciBlbmtlbHRuw6ZyaW5nZXIsIG9nIHNhbW1lbmxpZ25lIHNpdHVhc2pvbmVuIG9nIHV0dmlrbGluZ2VuIGZvciBsb2thbGUga29tbXVuZXIgb2cgbG9rYWwgcmVnaW9uIG1lZCBkZXQgc29tIGdqZWxkZXIgZm9yIG5hc2pvbmVuIHNhbWxldC4KLSAgIEJlcmVnbmUgbG9rYWxpc2VyaW5nc2t2b3RpZW50ZXIgZm9yIHVsaWtlIG7DpnJpbmdlciBpIHVsaWtlIGtvbW11bmVyLCBvZyBmb3IgcmVnaW9uZW4oZSkgc2FtbGV0LgotICAgQmVyZWduZSB1bGlrZSBhZ2dyZWdlcmluZ3NuaXbDpWVyIGF2IG7DpnJpbmdlciBvZyBnZW9ncmFmaSwgaWRlbnRpZmlzZXIgbXVsaWdlIGtseW5nZXIgYmFzZXJ0IHDDpSB2ZXJkaWVuZSBmb3IgbG9rYWxpc2VyaW5nc2t2b3RpZW50ZW5lLgotICAgR2rDuHJlIGVuIHZ1cmRlcmluZyBhdiBodm9yIGtvbnNlbnRyZXJ0L3NwcmVkdCBlbiBuw6ZyaW5nIGVyIGZvcmRlbHQgbWVsbG9tIGtvbW11bmVuZSBpIHJlZ2lvbmVuLCBiYXNlcnQgcMOlIGJlcmVnbmluZ2VyIGF2IGRlbiByb21saWdlIEdpbmktaW5kZWtzZW4uCi0gICBWdXJkZXJlIG9tIHNhbW1lbmxpZ25pbmdzZ3J1bm5sYWdldCBiw7hyIHbDpnJlIHNhbWxldCBzeXNzZWxzZXR0aW5nIGkgcmVnaW9uZW4sIGVsbGVyIHNhbWxldCBzeXNzZWxzZXR0aW5nIGF2IG5hc2pvbmVuLCBvZyBmaW5uZSB1dCBodmlsa2VuIHJvbGxlIGRldCBzcGlsbGVyIG9tIGVuIGJydWtlciByZWdpb25hbGUgZWxsZXIgbmFzam9uYWxlIGFuc2xhZyBmb3Igc2FtbGV0IHN5c3NlbHNldHRpbmcuCi0gICBGaW5uZSB1dCBvbSBuw6ZyaW5nc3N0cnVrdHVyZW4gaSByZWdpb25lbiBoYXIgYmxpdHQgbWVyIGVsbGVyIG1pbmRyZSBkaXZlcnNpZmlzZXJ0LCBtYW5nZm9sZGlnLCBvdmVyIHRpZC4KLSAgIEJlcmVnbmUgZW4gcmVnaW9uYWwgbWFuZ2ZvbGQtaW5kZWtzIG9nIGZpbm5lIHV0IGh2b3JkYW4gdmVyZGllbmUgcMOlIGVuIHNsaWsgaW5kZWtzIGVyIGVuZHJldCBvdmVyIHRpZC4KLSAgIFZ1cmRlcmUgb20gc3lzc2Vsc2V0dGluZ3NhbmRlbGVuZSBza2FsIHNhbW1lbmxpZ25lcyBtZWQgbmFzam9uYWxlIGVsbGVyIHJlZ2lvbmFsZSBhbmRlbGVyIGZvciBkZSB1bGlrZSBuw6ZyaW5nZW5lCi0gICBHamVudGEgYmVyZWduaW5nZXIgZm9yIGFuZGVsZXIgYXYgYXJiZWlkc3Rha2VyZSBpIHVsaWtlIG7DpnJpbmdlciwgbG9rYWxpc2VyaW5nc2t2b3RpZW50ZXIsIGRlbiByb21saWdlIEdpbmktIGtvZWZmaXNpZW50ZW4gb2cgbcOlbGV0IGZvciBtYW5nZm9sZCBhdiBuw6ZyaW5nZXIsIG1lZCB1dGdhbmdzcHVua3QgaSBkYXRhIHNwZXNpZmlzZXJ0IGV0dGVyIGFyYmVpZHN0YWtlcm5lcyBib3N0ZWQuCi0gICBTYW1tZW5saWduZSByZXN1bHRhdGVuZSBmb3IgZGF0YSBldHRlciBhcmJlaWRzc3RlZCwgb2cga29tbWVudGVyIGh2aWxrZW4gaW5mb3JtYXNqb24gcmVzdWx0YXRlbmUgZ2lyIG9tIHJvbWxpZyBtb2JpbGl0ZXQgaSBhcmJlaWRzbWFya2VkZXQuCi0gICBHaSBlbiBrb3J0IG92ZXJzaWt0IG92ZXIgcGVuZGxlcnN0csO4bW1lciBtZWxsb20ga29tbXVuZW5lIGkgcmVnaW9uZW4KLSAgIEJlcmVnbmUgb2cgcHJlc2VudGVyZSBhbmRlbGVyIGF2IGFyYmVpZHN0YWtlcmUgbWVkIGJvc3RlZCBpIGVuIGtvbW11bmUgc29tIGhhciBhcmJlaWRzc3RlZCBpIGFuZHJlIGtvbW11bmVyLCBvZyBnasO4ciBkZXQgc2FtbWUgZm9yIGFuZGVsZW4gYXYgam9iYmVuZSBpIGVuIGtvbW11bmUgc29tIGVyIGJlc2F0dCBhdiBhcmJlaWRzdGFrZXJlIGZyYSBhbmRyZSBrb21tdW5lci4KLSAgIERpc2t1dGVyZSBmb3Jza2plbGxlciBtZWxsb20ga29tbXVuZW5lIGkgcmVnaW9uZW4sIG9nIGRyw7hmdCB1dHZpa2xpbmdlbiBvdmVyIHRpZCBmb3IgdWxpa2Uga29tbXVuZXIKLSAgIEJlcmVnbmUgb2cgcHJlc2VudGVyZSBhbmRlbGVuIGF2IGFyYmVpZHN0YWtlcmUgc29tIGJvciBvZyBqb2JiZXIgaW5uZW5mb3Igc2FtbWUga29tbXVuZS4gU2Ugb20gZGV0IGVyIHN5c3RlbWF0aXNrZSBmb3Jza2plbGxlciBzZXR0IGkgZm9yaG9sZCB0aWwgc2VudHJhbGl0ZXQgb2cgdGlsZ2plbmdlbGlnaGV0IGkgZGV0IGxva2FsZSBhcmJlaWRzbWFya2VkZXQuIE9nIG9tIGRldCBlciBiZXN0ZW10ZSB0cmVuZGVyIGkgdXR2aWtsaW5nZW4gZm9yIHVsaWtlIGtvbW11bmVyLgotICAgQnJ1a2UgYmVyZWduaW5nZW5lIGF2IGxva2FsaXNlcmluZ2t2b3RpZW50ZXIgdGlsIMOlIGRlbGUgbsOmcmluZ2VuZSBpbm4gaSBsb2thbC0gb2cgYmFzaXNuw6ZyaW5nZXIKLSAgIEZvcm11bGVyZSBlbiDDuGtvbm9taXNrIGJhc2Vtb2RlbGwgb2cgYmVyZWduZSDDuGtvbm9taXNrZSBiYXNlbXVsaXBsaWthdG9yZXIgZm9yIGVua2VsdGtvbW11bmVyIG9nIHJlZ2lvbihlcikuCi0gICBWdXJkZXJlIGxva2FsZSB2aXJrbmluZ2VyIGF2IGFsdGVybmF0aXZlIGxva2FsaXNlcmluZ2VyIGkgT2RkYSwgSHVzbmVzIG9nIExlaXJ2aWsKLSAgIERyw7hmdGUgdmlya25pbmdlciBhdiBldCBzbGlrdCBwb3NpdGl2dCBla3NvZ2VudCBzam9rayBmb3IgZGVuIGxva2FsZSDDuGtvbm9taWVuIGdqZW5ub20gYnJ1ayBhdiBlbiBiYXNlbW9kZWxsCi0gICBGaW5uZSB1dCBodm9yZGFuIHZpcmtuaW5nZW5lIGV2ZW50dWVsdCBzcHJlcyB0aWwgYW5kcmUga29tbXVuZXIgaSByZWdpb25lbiBvZyBodm9yZGFuIGVuIGthbiBicnVrZSBkYXRhIGZvciBwZW5kbGVzdHLDuG1tZXIgdGlsIMOlIHByZWRpa2VyZSB2aXJrbmluZ2VyIHDDpSBzeXNzZWxzZXR0aW5nZW4gaSB1bGlrZSBrb21tdW5lci4KLSAgIFNhbW1lbmxpZ25lIGRpc3NlIHByZWRpa3Nqb25lbmUgbWVkIGRlIHZpIGbDpXIgbsOlciB2aSBnamVubm9tZsO4cmVyIGFuYWx5c2VuIHDDpSByZWdpb25hbHQgbml2w6UuCi0gICBHaSBlbiBzaGlmdC1zaGFyZSBhbmFseXNlIGkgZW4gZGlza3Vzam9uIGF2IGZvcnNramVsbGVyIGkgdmVrc3QgZm9yIGVrc2VtcGVsIG1lbGxvbSBpbmRyZSwgbWlkdHJlIG9nIHl0cmUgZGVsZXIgYXYgcmVnaW9uZW4sIGVsbGVyIGV2ZW50dWVsdCBvbXLDpWRlci9rb21tdW5lciBzb20gaGFyIGhhdHQgc3Rlcmsgb2cgc3ZhayBiZWZvbGtuaW5nc3V0dmlrbGluZy4KCiMjIE92ZXJzaWt0IG92ZXIgYmVmb2xrbmluZ2VuZSBpIHJlZ2lvbmVuZQoKIyMjIEhhdWdhbGFuZGV0CgpIYXVnYWxhbmRldCBiZXN0w6VyIGF2IGtvbW11bmVuZSBCb2tuICg4NTIpLCBIYXVnZXN1bmQgKDM3MzU3KSwgS2FybcO4eSAoNDIxODYpLCBTYXVkYSAoNDU5NSksIFR5c3bDpnIoMTEwNjUpLCBVdHNpcmEoMTk4KSBvZyBWaW5kYWZqb3JkKDg3MTQpLgp0aWxzYW1tZW4gYm9yIGRldCAxMDQ5NjcgcGVyc29uZXIgaSBkZW5uZSByZWdpb25lbi4KaSB0aWRzcGVyaW9kZW4gdmkgaGFyIGhlbnRldCBpbm4gZGF0YSBoYXIgZGV0IHZlcnQga29tbXVuZXNhbW1lbnNsw6VpbmcgaSBkZW5uZSByZWdpb25lbi4KRGEgYmxlIMOYbGVuIG9nIHZpbmRhZmpvcmQgc2zDpXR0IGkgc2FtbWVuIHRpbCBlbiBrb21tdW5lIChodm9yZGFuIGhhciB2aSB0YXR0IGhlbnN5biB0aWwgZGV0dGU/Pz8pCgojIyMgU3VubmhvcmRsYW5kIG9nIFVsbGVuc3ZhbmcKClN1bm5ob3JkbGFuZCBvZyBVbGxlbnN2YW5nIGJlc3TDpXIgYXYga29tbXVuZW5lIELDuG1sbygxMTk1NyksIEV0bmUoNDA2MiksIEZpdGphcigzMTg5KSwgS3Zpbm5oZXJhZCgxMzA3MSksIFN0b3JkKDE4NzU5KSwgU3ZlaW8oNTc2NiksIFR5c25lcygyODY5KSBvZyBVbGxlbnN2YW5nKDExMDQ4KS4KVGlsc2FtbWVuIGJvciBkZXQgNzA3MjEgcGVyc29uZXIgaSBkZW5uZSByZWdpb25lbi4KClRhbGxlbmUgZXIgaGVudGV0IGZyYSBTU0IgMDkuMDEuMjEgKDxodHRwczovL3d3dy5zc2Iubm8vc3RhdGJhbmsvdGFibGUvMDEyMjMvdGFibGVWaWV3TGF5b3V0MS8+KSBnamVsZGVyIGZvciA0IGt2YXJ0YWwgMjAyMC4KCiJGb3JrbGFyIGxpdHQgb20gZGUgZm9yc2tqZWxsaWdlIG7DpnJpbmdlbmUiLi4uLi4gCgpgYGB7ciBjc3ZfZmlsZXJ9CnN5c3NlbF9hcmIgPC0gcmVhZF9jc3YoIkRhdGEvc3lzc2VsX2FyYi5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpobGRfYXJiIDwtIHJlYWRfY3N2KCJEYXRhL2hsZF9hcmIuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKc3VuX2FyYiA8LSByZWFkX2NzdigiRGF0YS9zdW5fYXJiLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCmhhcl9hcmIgPC0gcmVhZF9jc3YoIkRhdGEvaGFyX2FyYi5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpzeXNzZWxfYm9zIDwtIHJlYWRfY3N2KCJEYXRhL3N5c3NlbF9ib3MuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKaGxkX2JvcyA8LSByZWFkX2NzdigiRGF0YS9obGRfYm9zLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCnN1bl9ib3MgPC0gcmVhZF9jc3YoIkRhdGEvc3VuX2Jvcy5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpoYXJfYm9zIDwtIHJlYWRfY3N2KCJEYXRhL2hhcl9ib3MuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKUGVuZGxpbmcgPC0gcmVhZF9jc3YoIkRhdGEvUGVuZGxpbmcuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKaGdsX1BlbmRsaW5nIDwtIHJlYWRfY3N2KCJEYXRhL2hnbF9QZW5kbGluZy5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpzdW5fUGVuZGxpbmcgPC0gcmVhZF9jc3YoIkRhdGEvc3VuX1BlbmRsaW5nLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCmBgYAoKIyAxIFN5c3NlbHNldHRpbmcgaSB1bGlrZSBuw6ZyaW5nZXIsIGV0dGVyIGFyYmVpZHNzdGVkCgojIyBIYXVnYWxhbmRldAoKRsO4cnN0ZSByZWdpb25lbiB2aSB2ZWxnZXIgw6Ugc2UgcMOlIGVyIEhhdWdhbGFuZGV0LgpIZXIgw7huc2tlciB2aSDDpSBzZSBww6UgdXR2aWtsaW5nZW4gZnJhIDIwMDggdGlsIDIwMjAsIGF2IGFudGFsbCBhbnNhdHRlIGkgc2luIGhlbGhldCBpIHJlZ2lvbmVuLCBzYW10IGRlIDYgbWVzdCByZWxldmFudGUgbsOmcmluZ2VuZS4KCmBgYHtyIEFyYmVpZHNzdGVkX0hhdWdhbGFuZGV0XzF9CmhsZF9hcmIgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSDDhXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMTogSGF1Z2FsYW5kZXQiKSsKICB5bGFiKCJBbnRhbGwgYW5zYXR0ZSBpICBcbiBhbGxlIG7DpnJpbmdlciIpICsKICB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoYW5nbGU9MCkpKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkKYGBgCgpJIDIwMjAgZXIgZGV0IGkgdW5kZXJrYW50IGF2IDUwIDAwMCBhbnNhdHRlIGkgYWxsZSBuw6ZyaW5nZXIgcMOlIEhhdWdhbGFuZGV0LgpBdiBGaWcuCjEgc2VyIHZpIGF0IEhhdWdhbGFuZGV0IGZpa2sgZW4gbmVkZ2FuZyBpIGFudGFsbCBhbnNhdHRlIGkgMjAxNSBvZyAyMDE2LgpJIDIwMTcgb2cgMjAxOCBibGUgZGV0IHZla3N0LCBmcmVtIHRpbCBkZXQgc251ZGRlIGkgMjAxOSBpZ2plbi4KCmBgYHtyIEFyYmVpZHNzdGVkX0hhdWdhbGFuZGV0XzJ9CnN5c3NlbF9hcmIgJT4lIAogIGZpbHRlcihrbnIgJWluJSBjKDExMDYsIDExMzUsIDExNDUsIDExNDYsIDExNDksIDExNTEsIDExNjApKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IGBBbGxlIE7DpnJpbmdlcmAsIChhbmdsZT0wKSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGdlb21fbGluZShhZXMoZ3JvdXAgPSBrbmF2biwgY29sb3VyID0ga25hdm4pKSArCiAgc2NhbGVfc2l6ZV9tYW51YWwodmFsdWVzID0gYyhzZXEoMi4wLCAyLCBieSA9IC0wLjEpKSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDApICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMjogSGF1Z2FsYW5kZXQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUgaSAgXG4gYWxsZSBuw6ZyaW5nZXIiKSArCiAgdGhlbWUoYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGFuZ2xlPTApKSsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpJIEZpZy4KMiBzZXIgdmkgYXQgZmxlcmUgYXYga29tbXVuZW5lIHDDpSBIYXVnYWxhbmRldCBoYXIgaGF0dCBsaXRlbiBhcmJlaWRzcGxhc3N2ZWtzdCwgbWVkIHVubnRhayBhdiBUeXN2w6ZyLCBWaW5kYWZqb3JkIG9nIEthcm3DuHkgaSBkZW4gc2lzdGUgdGnDpXJzcGVyaW9kZW4uClZpIHNlciBkZXR0ZSBtZXIgdHlkZWxpZyBww6UgZmlnLgozIG9nIDQuCgpgYGB7ciBobGRfYXJiX2xvbmd9CmhsZF9hcmJfbG9uZyA8LSBzeXNzZWxfYXJiICU+JQogIHBpdm90X2xvbmdlcigKICAgIGNvbHMgPSBgQWxsZSBOw6ZyaW5nZXJgOlVvcHBnaXR0LAogICAgbmFtZXNfdG8gPSAiTsOmcmluZyIsCiAgICB2YWx1ZXNfdG8gPSAiQW5zYXR0ZSIpCmBgYAoKYGBge3IgTsOmcmluZ19Ub3RhbF9IYXVnYWxhbmRldF8zX1N0w7hyc3RlX0FyYmVpZHN0ZWR9CmhsZF9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiSGF1Z2VzdW5kIiwgIkthcm3DuHkiLCAiVmluZGFmam9yZCIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFhciwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAzOiBIYXVnYWxhbmRldDogSGF1Z2VzdW5kLCBLYXJtw7h5IG9nIFZpbmRhZmpvcmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAzKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDIpKSArIAogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIHZqdXN0ID0gMC41LCBoanVzdD0xKSkKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX0hhdWdhbGFuZGV0XzRfTWluc3RlX0FyYmVpZHN0ZWR9CmhsZF9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiQm9rbiIsICJTYXVkYSIsICJUeXN2w6ZyIiwgIlV0c2lyYSIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFhciwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiA0OiBIYXVnYWxhbmRldDogQm9rbiwgU2F1ZGEgVHlzdsOmciBvZyBVdHNpcmEiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDIpKSArIAogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIHZqdXN0ID0gMC41LCBoanVzdD0xKSkKYGBgCgpGaWd1ciAzIG9nIDQgdmlzZXIgdXR2aWtsaW5nZW4gYXYgZGV0IHRvdGFsZSBhbnRhbGwgYW5zYXR0ZSBpIGFsbGUgbsOmcmluZ2VyIHDDpSBrb21tdW5hbHQgbml2w6UsIGlubmVuZm9yIEhhdWdhbGFuZC1yZWdpb25lbi4KCkkgZGlzc2UgZmlndXJlbmUsIHPDpSBzZXIgdmkgdHlkZWxpZyBhdCBIYXVnZXN1bmQgaGFyIGhhdHQgcmVkdWtzam9uIGkgYW50YWxsIGFuc2F0dGUgdG90YWx0IHNldHQsIG1lbnMgS2FybcO4eSwgVmluZGFmam9yZCBvZyBUeXN2w6ZyIGhhciBoYXR0IGVuIG1hcmthbnQgdmVrc3QgZGUgc2lzdGUgdGkgw6VyZW5lLgpTaWRlbiBIYXVnZXN1bmQgaGFyIGZsZXN0IGFyYmVpZHNwbGFzc2VyIGJldHlyIHV0dmlrbGluZ2VuIGkgSGF1Z2VzdW5kIG15ZSBmb3IgZGUgc2FtbGVkZSB0YWxsZW5lLgoKYGBge3IgTsOmcmluZ3Nmb3JkZWxpbmdfb2dfVXR2aWtsaW5nX0hhdWdlbGFuZGV0XzNfU3TDuHJzdGVfQXJiZWlkc3N0ZWR9CmhsZF9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiSGF1Z2VzdW5kIiwgIkthcm3DuHkiLCAiVmluZGFmam9yZCIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSBjKCJJbmR1c3RyaSIsICJIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIiwgIkZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nIiwgIkVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uIiwgIkJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldCIsICJKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2UiKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDU6IEhhdWdhbGFuZGV0OiBIYXVnZXN1bmQsIEthcm3DuHkgb2cgVmluZGFmam9yZCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDMpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfSGF1Z2VsYW5kZXRfNF9NaW5zdGVfQXJiZWlkc3N0ZWR9CmhsZF9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiQm9rbiIsICJTYXVkYSIsICJUeXN2w6ZyIiwgIlV0c2lyYSIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSBjKCJJbmR1c3RyaSIsICJIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIiwgIkZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nIiwgIkVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uIiwgIkJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldCIsICJKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2UiKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDY6IEhhdWdhbGFuZGV0OiBCb2tuLCBTYXVkYSwgVHlzdsOmciBvZyBVdHNpcmEiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKRmlndXIgNSBvZyA2IHZpc2VyIHV0dmlrbGluZ2VuIGF2IGRlIDYgbWVzdCByZWxldmFudGUgbsOmcmluZ2VuZSBpIEhhdWdhbGFuZHNyZWdpb25lbiBww6Uga29tbXVuZSBuaXbDpS4KClZpIHNlciBpIGRlIHRyZSBzdMO4cnN0ZSBrb21tdW5lbmUsIEhhdWdlc3VuZCwgS2FybcO4eSBvZyBWaW5kYWZqb3JkIHV0Z2rDuHIgbsOmcmluZ2VuZSBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIG9nIEluZHVzdHJpIGRlIHN0w7hyc3RlLgpIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIGhhciB2b2tzdCBqZXZudCBvZyB0cnV0dCBkZSBzaXN0ZSB0acOlcmVuZSwgbWVucyBhbnRhbGwgYW5zYXR0ZSBpIGluZHVzdHJpbsOmcmluZ2VuIGhhciB2YXJpZXJ0IGZyYSBrb21tdW5lIHRpbCBrb21tdW5lLgpJIEhhdWdhbGFuZGV0IHV0Z2rDuHIgcHJpbcOmcm7DpnJpbmdlciAoam9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlKSBlbiBzdMO4cnJlIGFuZGVsLCBlbm4gaG9zIEthcm3DuHkgb2cgSGF1Z2VzdW5kIGh2b3IgcHJpbcOmcm7DpnJpbmdlbmUga3VuIHV0Z2rDuHJlIGVuIGxpdGVuIGFuZGVsLgoKIyMjIFN5c3NlbHNldHRpbmdzdXR2aWtsaW5nZW4gZm9yIHVsaWtlIG7DpnJpbmdlciBpIHVsaWtlIGtvbW11bmVyIG9nIGZvciByZWdpb25lbiBzYW1sZXQuCgpEZXQgZXIgcmVsYXRpdnQgc3RvcmUga29tbXVuZXZpc2UgZm9yc2tqZWxsZXIgaSBuw6ZyaW5nc3N0cnVrdHVyZW4uClJvZ2FsYW5kIGhhciBlbiBmb3Job2xkc3ZpcyBlbnNpZGlnIG7DpnJpbmdzc3RydWt0dXIsIG9samUgb2cgZ2FzcyBlciBkb21pbmVyZW5kZS4KRnlsa2V0IGVyIHN1dmVyZW50IGRvbWluZXJlbmRlIGZvciBmb3NzaWwgZW5lcmdpLgpEZSBoYXIgZm9yIMO4dnJpZyBkZSBzaXN0ZSDDpXJlbmUgc2F0c2V0IHDDpSBldCBlbiBtZXIgZGlmZmVyZW5zaWVydCBuw6ZyaW5nc3N0cnVrdHVyIG9nIG7DpnJpbmdzbGl2IHZlZCDDpSBzYXRzZSBww6UgaGVsc2UsIElLVCBvZyBmb3JueWJhciBlbmVyZ2kuCgpJIHbDpXJlIG1vZGVsbGVyLCBlciBzYXRzaW5nZW4gcMOlIGhlbHNlIGRlbiBtZXN0IHR5ZGVsaWdlLgpBdiByZW50IHRla25pc2tlIGdydW5uZXIgZXIgZGV0IHZhbnNrZWxpZyDDpSBzZSB1dHZpa2xpbmdlbiBpIGVua2VsdGUgbsOmcmluZ2VyIHNvbSB1dGdqw7hyIHNtw6UgYW5kZWxlciwgcMOlIGdydW5uIGF2IHNrYWxhZW4gc29tIGVyIGJlbnl0dGV0LgpUaWwgdHJvc3MgZm9yIGRldHRlLCBrYW4gbWFuIHNlIGF0IG7DpnJpbmdzc3RydWt0dXJlbiBpIHJlZ2lvbmVuIHNhbWxldCBnZW5lcmVsdCBzZXR0IGhhciBlbmRyZXQgc2VnIGxpdGUuCgpSb2dhbGFuZCBoYXIgZ29kZSBqb3JkYnJ1a3NtdWxpZ2hldGVyLCBtZW4gaSBGaWcuCjI6IEhhdWdhbGFuZGV0IHNlciB2aSBlbiBuZWRnYW5nIGkgc3lzc2Vsc2V0dGluZ2VuIGRlIHNpc3RlIHRpw6VyZW5lLCBtZW5zIGRldCBlciBlbiBtYXJnaW5hbCDDuGtuaW5nIGkgU3VubmhvcmRhbGFuZCwgamYuCkZpZyA5LgpJIEZpZy4KMTI6IHNlciB2aSBhdCBUeXNuZXMgaGFyIGhhdHQgZW4gbWFya2FudCDDuGtuaW5nIGkgcHJpbcOmcm7DpnJpbmdlbiwgcmVsYXRpdnQgc2V0dC4KClVuaXZlcnNpdGV0cy0gb2cgaMO4Z3Nrb2xlc2VrdG9yZW4gZXIgbGl0ZW4gaSBSb2dhbGFuZCwgb2cgZGVuIGJlc3TDpXIgZm9yIGRldCBmw7hyc3RlIGF2IFVuaXZlcnNpdGV0ZXQgaSBTdGF2YW5nZXIgKFVpUykgb2cgSMO4Z3NrdWxlbiBww6UgVmVzdGxhbmRldCAoSFZMKSBtZWQgY2FtcHVzIEhhdWdlc3VuZC4KCkhhdWdhbGFuZCBWZWtzdCwgc29tIGVyIGVpZ2QvZHJldmV0IGF2IEhhdWdhbGFuZHNyZWdpb25lbiBlciBpIHNwaXNzZW4gcMOlIMOlIGxlZ2dlIHRpbCByZXR0ZSBmb3Igw6UgZXRhYmxlcmUgbnkgaW5kdXN0cmkgc2FtdCBhbmRyZSBhcmJlaWRzcGxhc3NlciBpIHJlZ2lvbmVuLgoKSSBoZWxzZXNla3RvcmVuIGVyIFN0YXZhbmdlciB1bml2ZXJzaXRldHNzeWtlaHVzIChTdVMpIHNlbnRyYWx0LgoKIyMgU3VubmhvcmRsYW5kCgpWaWRlcmUgw7huc2tlciB2aSDDpSBzZSBww6UgZGVuIHNhbW1lIHV0dmlrbGluZ2VuLCBtZW4gZGVubmUgZ2FuZ2VuIGkgU3VubmhvcmRsYW5kc3JlZ2lvbmVuLgoKYGBge3IgQXJiZWlkc3N0ZWRfU3VubmhvcmRsYW5kXzF9CnN1bl9hcmIgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSDDhXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gNzogU3VubmhvcmRhbGFuZCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSBpICBcbiBhbGxlIG7DpnJpbmdlciIpICsKICB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoYW5nbGU9MCkpKyAKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMSkpCmBgYAoKSGVyIHZpc2VyIGZpZ3VyIDcgdXR2aWtsaW5nZW4gdGlsIGRlbiB0b3RhbGUgc3VtbWVuIGF2IGFuc2F0dGUgaSBTdW5uaG9yZGxhbmRzcmVnaW9uZW4gZnJhIDIwMDggdGlsIDIwMjAuClN1bm5ob3JkYWxhbmQgaGFyIGkgMjAyMCBpIHVuZGVya2FudCBhdiAyNSA1MDAgYW5zYXR0ZS4KVmkgc2VyIHV0IGlmcsOlIGZpZ3VyZW4gYXQgU3VubmhvcmRsYW5kc3JlZ2lvbmVuIGhhZGRlIGVpbiBtYXJrYW50IHZla3N0IGlmcsOlIDIwMDggdGlsIDIwMTQgbWVkIHBlcmlvZGFyIG1lZCBzdmFrIG5lZGdhbmcuCkZyYSAyMDE0IGhhciBkZXQgdsOmcnQgZW4gcmVkdWtzam9uIGkgdG90YWx0IGFudGFsbCBhbnNhdHRlLgoKYGBge3IgQXJiZWlkc3N0ZWRfU3VubmhvcmRsYW5kXzJ9CnN5c3NlbF9hcmIgJT4lIAogIGZpbHRlcihrbnIgJWluJSBjKDQ2MTEsIDQ2MTIsIDQ2MTMsIDQ2MTQsIDQ2MTUsIDQ2MTYsIDQ2MTcpKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFhciwgeSA9IGBBbGxlIE7DpnJpbmdlcmApKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBnZW9tX2xpbmUoYWVzKGdyb3VwID0ga25hdm4sIGNvbG91ciA9IGtuYXZuKSkgKwogIHNjYWxlX3NpemVfbWFudWFsKHZhbHVlcyA9IGMoc2VxKDIuMCwgMiwgYnkgPSAtMC4xKSkpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDEpKSArCiAgIGxhYnModGl0bGUgPSAiRmlnLiA4OiBTdW5uaG9yZGxhbmQiLCB4ID0gIsOFciIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpGaWd1ciA4IHZpc2VyIHV0dmlrbGluZ2VuIGF2IHRvdGFsdCBhbnNhdHRlIGkgU3VubmhvcmRsYW5kc3JlZ2lvbmVuIHDDpSBrb21tdW5lbml2w6UgaSBoZWxlIHJlZ2lvbmVuIGZyYSAyMDA4IHRpbCAyMDIwLgpEZW5uZSBmaWd1cmVuIGdpciBvc3MgZW4gb3ZlcnNpa3QsIG1lbiBlciBpa2tlIGhlaWx0IGJydWtlcnZlbm5lbGlnLgpWaSBsYWdlciBkZXJtZWQgZW4gbWVyIG92ZXJzaWt0bGlnIGZpZ3VyLCBqZi4KZmlndXIgOSAmIDEwLgoKYGBge3Igc3VuX2FyYl9sb25nfQpzdW5fYXJiX2xvbmcgPC0gc3lzc2VsX2FyYiAlPiUKICBwaXZvdF9sb25nZXIoCiAgICBjb2xzID0gYEFsbGUgTsOmcmluZ2VyYDpVb3BwZ2l0dCwKICAgIG5hbWVzX3RvID0gIk7DpnJpbmciLAogICAgdmFsdWVzX3RvID0gIkFuc2F0dGUiKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfU3VubmhvcmRsYW5kXzNfU3TDuHJzdGVfQXJiZWlkc3RlZH0Kc3VuX2FyYl9sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJCw7htbG8iLCAiS3Zpbm5oZXJhZCIsICJTdG9yZCIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFhciwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiA5OiBTdW5uaG9yZGxhbmQ6IELDuG1sbywgS3Zpbm5oZXJhZCBvZyBTdG9yZCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDMpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykgKyAKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMikpICsgCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgdmp1c3QgPSAwLjUsIGhqdXN0PTEpKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfU3VubmhvcmRsYW5kXzRfTWluc3RlX0FyYmVpZHN0ZWR9CnN1bl9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiRXRuZSIsICJGaXRqYXIiLCAiU3ZlaW8iLCAiVHlzbmVzIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lICJBbGxlIE7DpnJpbmdlciIpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYWFyLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzKGRpc2NyZXRlID0gVFJVRSwgb3B0aW9uID0gIkEiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDEwOiBTdW5uaG9yZGxhbmQ6IEV0bmUsIEZpdGhhciwgU3ZlaW8gb2cgVHlzbmVzIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKSArIAogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAyKSkgKyAKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCB2anVzdCA9IDAuNSwgaGp1c3Q9MSkpCmBgYAoKVmkgc2VyIGhlciB1dCBpZnJhIGZpZ3VyIDkgb2cgMTAgdXR2aWtsaW5nZW4gZm9yIGh2ZXIgZW5rZWx0IGtvbW11bmUgaSBTdW5uaG9yZGxhbmQgdG90YWx0IHNldHQsIG9nIGhlciBzZXIgdmkgbXllIHR5ZGxpZ2VyZSB1dHZpa2xpbmdlbiBmcmEgMjAwOCB0aWwgMjAyMC4KRW4ga2FuIHNlIGhlciBhdCBLdmlubmhlcmFkLCBFdG5lIG9nIEZpdGphciBoYXIgaGF0dCBlbiByZWR1a3Nqb24gaSB0b3RhbHQgYW5zYXR0ZSwgbWVucyBUeXNuZXMgb2cgU3ZlaW8gaGFyIGhhdHQgZWluIGtyYWZ0aWcgdmVrc3QuCkVuIGludGVyZXNzYW50IGJlbWVya2luZyBlciBTdG9yZCBpIDIwMTQgb2cgS3Zpbm5oZXJhZCBmcmEgMjAwOCB0aWwgMjAxNy4KCkZvciDDpSBmw6UgZXQgYmVkcmUgb3ZlcnNpa3Qgb3ZlciB1dHZpa2xpbmdlbiBpIGtvbW11bmVuIMO4bnNrZXIgdmkgw6Ugc2UgcMOlIGRlIDYgbWVzdCByZWxldmFudGUgbsOmcmluZ2VuZSBpIGh2ZXIga29tbXVuZS4KCmBgYHtyIE7DpnJpbmdzZm9yZGVsaW5nX29nX1V0dmlrbGluZ19TdW5uaG9yZGxhbmRfM19TdMO4cnN0ZV9BcmJlaWRzc3RlZH0Kc3VuX2FyYl9sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJCw7htbG8iLCAiU3RvcmQiLCAiS3Zpbm5oZXJhZCIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSBjKCJJbmR1c3RyaSIsICJIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIiwgIkZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nIiwgIkVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uIiwgIkJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldCIsICJKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2UiKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDExOiBTdW5uaG9yZGxhbmQ6IELDuG1sbywgS3Zpbm5oZXJhZCBvZyBTdG9yZCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDMpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykgKyAKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMikpICsgCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgdmp1c3QgPSAwLjUsIGhqdXN0PTEpKQpgYGAKCmBgYHtyIE7DpnJpbmdzZm9yZGVsaW5nX29nX1V0dmlrbGluZ19TdW5uaG9yZGxhbmRfNF9NaW5zdGVfQXJiZWlkc3N0ZWR9CnN1bl9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiRXRuZSIsICJTdmVpbyIsICJGaXRqYXIiLCAiVHlzbmVzIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lIGMoIkluZHVzdHJpIiwgIkhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXIiLCAiRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmciLCAiRWxla3RyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb24iLCAiQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0IiwgIkpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZSIpKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMTI6IFN1bm5ob3JkbGFuZDogRXRuZSwgRml0amFyLCBTdmVpbyBvZyBUeXNuZXMiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKRmlndXIgMTEgb2cgMTIgdmlzZXIgZGUgNiBtZXN0IHJlbGV2YW50ZSBuw6ZyaW5nZW5lIGkgaHZlciBlbmtlbHQga29tbXVuZSBpIFN1bm5ob3JkbGFuZHNyZWdpb25lbiBmcmEgMjAwOCB0aWwgMjAyMC4KCkVuIHNlciB1dCBpZnJhIGZpZ3VyIDExIGF0IGkgZGUgdHJlIHN0w7hyc3RlIGtvbW11bmVuZSwgKkLDuG1sbyosICpLdmlubmhlcmFkKiBvZyAqU3RvcmQqIHPDpSBoYXIgZGUgYWxsZSBoYXR0IGVuIHJlZHVrc2pvbiBpIGluZHVzdHJpZW4sIHNhbXRpZGlnIHNvbSBkZSBoYXIgaGF0dCBlbiB2ZWtzdCBpIGhlbHNlLSBvZyBzb3NpYWx0amVuZXN0ZXIuClR5c25lcyBoYXIgdsOmcnQgc3RhYmlsIG7DpXIgZGV0IGtvbW1lciB0aWwgaW5kdXN0cmksIG1lbiBoYXIgc2V0dCBlaW4gbWFya2FudCB2ZWtzdCBpIHByaW3DpnJuw6ZyaW5nZW4gKEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZSkuCgojIyMgU3lzc2Vsc2V0dGluZ3N1dHZpa2xpbmdlbiBmb3IgdWxpa2UgbsOmcmluZ2VyIGkgdWxpa2Uga29tbXVuZXIgb2cgZm9yIHJlZ2lvbmVuIHNhbWxldC4KCkRldCBmw7hyc3RlIGJlbWVya2Vsc2VzdmVyZGlnZSBpIFN1bm5ob3JkbGFuZHNyZWdpb25lbiBlciBkZW4gbWFya2FudGUgcmVkdWtzam9uZW4gaSBpbmR1c3RyaSBpIFN0b3JkIGtvbW11bmUgaSAyMDE0LCBzYW10IEt2aW5uaGVyYWQgZnJhIDIwMDguCkRldHRlIHN0ZW1tZXIgb3ZlcmVucyBtZWQgdG8gaGVuZGVsc2VyLgpEZW4gZsO4cnN0ZSBlciBvbGpla25la2tlbiBpIDIwMTQgc29tIG1lZGbDuHJ0ZSBhdCBibC5hLgpBa2VyIFN0b3JkIEFTIHNvbSBlciBhdmhlbmdpZyBhdiBPbGplLWluZHVzdHJpZW4gbcOldHRlIHBlcm1pdGVyZS4KClN0b3JkIGVyIGVuIGtvbW11bmUgc29tIGhhciBteWUgb2Zmc2hvcmUgaW5kdXN0cmkuCkkgMjAwOC8yMDA5IHPDpSBzdGVuZ3RlIFPDuHItTm9yZ2UgQWx1bWluaXVtICJCLUhhbGxlbiIgc29tIG1lZGbDuHJ0ZSA1MCUgcmVkdWtzam9uIGkgcHJvZHVrc2pvbiwgb2cgZGVybWVkIGFuc2F0dGUuCkludGVyZXNzYW50IMOlIGJlbWVya2UgYXQgaSBLdmlubmhlcmFkIHPDpSBlciBhbnRhbGwgaW5kdXN0cmlhcmJlaWRlcmUgcmVkdXNlcnQgc2FtdGlkaWcgc29tIGFudGFsbCBhbnNhdHRlIGkgSGVsc2UtIG9nIFNvc2lhbGV0amVuZXN0ZXIgw7hrdC4KQsO4bWxvIGhhciBvZ3PDpSBzZXR0IGVuIHN0YWJpbCByZWR1a3Nqb24gaSBhbnNhdHRlIGlubmVuIGluZHVzdHJpLCBzYW10IHZla3N0IGkgSGVsc2UtIG9nIFNvc2lhbGV0amVuZXN0ZXIgZnJlbSB0aWwgMjAxOC4KClNlciBlbiBww6UgaGVsZSBTdW5uaG9yZGxhbmRzcmVnaW9uZW4gaSBzaW4gaGVsaGV0LCBzw6Ugc2VyIHZpIGVuIHN2w6ZydCB0eWRlbGlnIHZla3N0IGlubmVuIEhlbHNlLSBvZyBTb3NpYWxldGplbmVzdGVyLCBvZyByZWR1a3Nqb24gaW5uZW4gaW5kdXN0cmkgaSBoZWxlIHJlZ2lvbmVuLgpLdmlubmhlcmFkLCBUeXNuZXMgb2cgRml0amFyIGhhciBvcHBsZXZkIGVpbiBtYXJrYW50IHZla3N0IGlubmVuIHByaW3DpnJuw6ZyaW5nLgoqKkthbiBkZXQgdmVyZSBlaW4gZ3J1bm4gdGlsIGRldHRlIHNvbSBidXJkZSBkaXNrdXRlcmFzdD8/KioKCiMgRm9ydHNldHQgSGVyIChPQSwgS0gpCgojIyBIYXJkYW5nZXIKClRpbCBzbHV0dCBtw6UgdmkgZ2plcmUgZGV0IHNhbW1lIG1lZCAqSGFyZGFuZ2VyKgoKSSBoZW5ob2xkIHRpbCBvcHBnYXZlbnMga3JhdiB0aWwgYmV0cmFrdGVyIHZpICpIYXJkYW5nZXIqIGbDuHIgMjAxOSBzb20gVWxsZW5zdmFuZy0gb2cgT2RkYSBrb21tdW5lIHNvbSB0byBzZXBhcmVydGUga29tbXVuZXIuCmkgMjAyMCBzw6UgYmxlIFVsbGVuc3ZhbmcsIE9kZGEgb2cgSm9uZGFsIHNsw6V0dCBzYW1tZW4gdGlsIFVsbGVuc3ZhbmcuCkRldHRlIGZvcmtsYXJlciBkZW4gdm9sZHNvbW1lIMO4a25pbmdlbiBpIHN5c3NlbHNldHRpbmcgaSByZWdpb25lbiB2ZWQgdGlkc3B1bmt0ZXQgZm9yIGtvbW11bmVzYW1tZW5zbMOlaW5nLgoKYGBge3IgQXJiZWlkc3N0ZWRfSGFyZGFuZ2VyXzF9Cmhhcl9hcmIgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSDDhXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMTM6IEhhcmRhbmdlciIsIHk9ICJBbGxlIE7DpnJpbmdlciIpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDIpKQpgYGAKCmBgYHtyIEFyYmVpZHNzdGVkX0hhcmRhbmdlcl8yfQpzeXNzZWxfYXJiICU+JSAKICBmaWx0ZXIoa25yICVpbiUgYyg0NjE4LCAxMjI4KSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgZ2VvbV9saW5lKGFlcyhncm91cCA9IGtuYXZuLCBjb2xvdXIgPSBrbmF2bikpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoJyMxMTExMTEnLCcjMDU0OTg3JykpICsKICBzY2FsZV9zaXplX21hbnVhbCh2YWx1ZXMgPSBjKHNlcSgyLjAsIDIsIGJ5ID0gLTAuMSkpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkgKwogICBsYWJzKHRpdGxlID0gIkZpZy4gMTQ6IEhhcmRhbmdlciIsIHggPSAiw4VyIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIGhhcl9hcmJfbG9uZ30KaGFyX2FyYl9sb25nIDwtIHN5c3NlbF9hcmIgJT4lCiAgcGl2b3RfbG9uZ2VyKAogICAgY29scyA9IGBBbGxlIE7DpnJpbmdlcmA6VW9wcGdpdHQsCiAgICBuYW1lc190byA9ICJOw6ZyaW5nIiwKICAgIHZhbHVlc190byA9ICJBbnNhdHRlIikKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX0hhcmRhbmdlcl9BcmJlaWRzdGVkfQpoYXJfYXJiX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIk9kZGEiLCAiVWxsZW5zdmFuZyIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxNTogSGFyZGFuZ2VyOiBPZGRhIG9nIFVsbGVuc3ZhbmciLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3IgTsOmcmluZ3Nmb3JkZWxpbmdfb2dfVXR2aWtsaW5nX0hhcmRhbmdlcl9BcmJlaWRzc3RlZH0KaGFyX2FyYl9sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJPZGRhIiwgIlVsbGVuc3ZhbmciKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxNjogSGFyZGFuZ2VyOiBPZGRhLCBVbGxlbnN2YW5nIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMykgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKClVsbGVuc3Zhbmcga29tbXVuZSBoYXIgc3RvciBrcmFmdHByb2R1a3Nqb24gb2cgaG92ZWRuw6ZyaW5nZW4gZXIgaW5kdXN0cmkuCk1ham9yaXRldGVuIGF2IGtyYWZ0cHJvZHVrc2pvbmVuIGZvcmVnw6VyIGkgdGlkbGlnZXJlIE9kZGEuCk9kZGEgZXIgZXQgZW5zaWRpZyBpbmR1c3RyaXN0ZWQsIG1lbiBoYXIgb2dzw6UgZW4gbWFyaXRpbSBuw6ZyaW5nIGkgdGlsbGVnZy4KSSBmaWd1ciAxNiBzZXIgdmkgYXQgaW5kdXN0cmluw6ZyaW5nZW4gdXRnasO4ciBlbiBiZXRyYWt0ZWxpZyBzdMO4cnJlIGFuZGVsIGF2IHN5c3NlbHNldHRpbmdlbiBpIGhlci4KSW5kdXN0cmluw6ZyaW5nZW4gZXIgb2dzw6Ugb21mYXR0ZXQgb2cgYnlnZy0gb2cgYW5sZWdnc3Zpcmtzb21oZXQuClDDpSBtb3RzYXR0IHNpZGUgZXIgam9yZGJydWssIGhlbHNlLSBvZyBzb3NpYWx0amVuZXN0ZXIgZG9taW5lcmVuZGUgaSBVbGxlbnN2YW5nLgoKKipHZW5lcmVsdCBvbSBVbGxlbnN2YW5nIGtvbW11bmUqKgoKVWxsZW5zdmFuZyBrb21tdW5lIChtZWQgT2RkYSkgaGFyIGhhdHQgZW4gamV2biBvZyBuZWdhdGl2IGJlZm9sa25pbmdzdmVrc3QgaSBtYW5nZSB0acOlci4KRGV0IGdqZW5zcGVpbGVzIGlra2UgdHlkZWxpZyBpIHbDpXJlIG1vZGVsbGVyIHDDpSBncnVubiBhdiBza2FsYWVuIHNvbSBlciBicnVrdC4KSSB0aWxsZWdnIGhhciB2aSBpa2tlIGhlbnN5bnRhdHQgaW5udmFuZHJlbmRlIGFyYmVpZGVyZSwgZWxsZXIgbWlkbGVydGlkaWdlIGZyYWZseXR0ZWRlIHNvbSBmb3IgZWtzZW1wZWwgc3R1ZGVudGVyLgoKIyAyIChEZXR0ZSBlciA+RUdFTlRMSUc8IHNpc3RlIGRlbCBhdiBvcHBnw6V2ZSAzLiBEZW5uZSBvZyBHaW5pL1JESSBmb3Igb3BwZ8OldmUgMyBiw7hyIGJsaSBieXR0YXN0IG9tKQoKRmlubmVyIGxva2FsaXNlcmluZ3Nrdm90aWVudGVyIGZvciB1bGlrZSBuw6ZyaW5nZXIgaSB1bGlrZSBrb21tdW5lciwgb2cgZm9yIHJlZ2lvbmVuIHNhbWxldAoKYGBge3J9CiNvcmRuZXIgZXR0ZXIga29tbXVuZW5hdm4gb2cgw6VyCnRtcCA8LSBzeXNzZWxfYm9zCmBgYAoKYGBge3J9CmhhdTIwIDwtIHN5c3NlbF9ib3MgJT4lIAogIGZpbHRlcihhYXIgPT0gIjIwMjAiLCBrbmF2biA9PSAiSGF1Z2VzdW5kIikKYGBgCgpgYGB7cn0KKGhhdTIwJEluZHVzdHJpL2hhdTIwJGBBbGxlIE7DpnJpbmdlcmApCjE5MDUvMTgxMzcKYGBgCgpgYGB7cn0KbHFfc3lzc2VsX2JvcyA8LSBzeXNzZWxfYm9zICU+JSAKICBtdXRhdGUoRWlyX0VyX2luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0pvcmRicnVrID0gYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX1VuZGVydmlzbmluZyA9IFVuZGVydmlzbmluZy9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfSGVsc2UgPSBgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCkKYGBgCgpgYGB7cn0KbGlicmFyeShyZWFkeGwpCm5hc2pvbmFsdF9ib3N0ZWQgPC0gcmVhZF9leGNlbCgiRGF0YS9uYXNqb25hbHRfYm9zdGVkLnhsc3giKQpgYGAKCmBgYHtyfQpuYXNqb25hbHRfYm9zdGVkIDwtIG5hc2pvbmFsdF9ib3N0ZWQgJT4lIAogIG11dGF0ZShFaW5fRW5fSW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaW5fRW5fSm9yZGJydWsgPSBgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaW5fRW5fVW5kZXJ2aXNuaW5nID0gVW5kZXJ2aXNuaW5nL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpbl9Fbl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgKQpgYGAKCgpgYGB7cn0KTFFfYm9zX0pvcmRicnVrIDwtIGxxX3N5c3NlbF9ib3MlPiUgCiAgc2VsZWN0KGFhciwga25hdm4sIEVpcl9Fcl9Kb3JkYnJ1aykgJT4lIAogIG11dGF0ZShhYXIgPSBhcy5jaGFyYWN0ZXIoYWFyKSkgJT4lIAogIGxlZnRfam9pbihzZWxlY3QoLmRhdGEgPSBuYXNqb25hbHRfYm9zdGVkLCBhYXIsIEVpbl9Fbl9Kb3JkYnJ1ayksIGJ5ID0gYygiYWFyIikpICU+JSAKICBtdXRhdGUoYW5kZWwgPSBFaXJfRXJfSm9yZGJydWsvRWluX0VuX0pvcmRicnVrCiAgKQoKTFFfYm9zX0luZHVzdHJpIDwtIGxxX3N5c3NlbF9ib3MgJT4lIAogIHNlbGVjdChhYXIsIGtuYXZuLCBFaXJfRXJfaW5kdXN0cmkpICU+JSAKICBtdXRhdGUoYWFyID0gYXMuY2hhcmFjdGVyKGFhcikpICU+JSAKICBsZWZ0X2pvaW4oc2VsZWN0KC5kYXRhID0gbmFzam9uYWx0X2Jvc3RlZCwgYWFyLCBFaW5fRW5fSW5kdXN0cmkpLCBieSA9IGMoImFhciIpKSAlPiUgCiAgbXV0YXRlKGFuZGVsID0gRWlyX0VyX2luZHVzdHJpL0Vpbl9Fbl9JbmR1c3RyaSkKCgpMUV9ib3NfVW5kZXJ2aXNuaW5nIDwtIGxxX3N5c3NlbF9ib3MgJT4lIAogIHNlbGVjdChhYXIsIGtuYXZuLCBFaXJfRXJfVW5kZXJ2aXNuaW5nKSAlPiUgCiAgbXV0YXRlKGFhciA9IGFzLmNoYXJhY3RlcihhYXIpKSAlPiUgCiAgbGVmdF9qb2luKHNlbGVjdCguZGF0YSA9IG5hc2pvbmFsdF9ib3N0ZWQsIGFhciwgRWluX0VuX1VuZGVydmlzbmluZyksIGJ5ID0gYygiYWFyIikpICU+JSAKICBtdXRhdGUoYW5kZWwgPSBFaXJfRXJfVW5kZXJ2aXNuaW5nL0Vpbl9Fbl9VbmRlcnZpc25pbmcpCgoKTFFfYm9zX0hlbHNlIDwtIGxxX3N5c3NlbF9ib3MgJT4lIAogIHNlbGVjdChhYXIsIGtuYXZuLCBFaXJfRXJfSGVsc2UpICU+JSAKICBtdXRhdGUoYWFyID0gYXMuY2hhcmFjdGVyKGFhcikpICU+JSAKICBsZWZ0X2pvaW4oc2VsZWN0KC5kYXRhID0gbmFzam9uYWx0X2Jvc3RlZCwgYWFyLCBFaW5fRW5fSGVsc2UpLCBieSA9IGMoImFhciIpKSAlPiUgCiAgbXV0YXRlKGFuZGVsID0gRWlyX0VyX0hlbHNlL0Vpbl9Fbl9IZWxzZSkKYGBgCgpgYGB7cn0Kc3lzc2VsX2JvcyA8LSBzeXNzZWxfYm9zICU+JSAKICBtdXRhdGUoTFFfYm9zX0pvcmRicnVrID0gTFFfYm9zX0pvcmRicnVrJGFuZGVsLAogICAgICAgICBMUV9ib3NfSW5kdXN0cmkgPSBMUV9ib3NfSW5kdXN0cmkkYW5kZWwsCiAgICAgICAgIExRX2Jvc19VbmRlcnZpc25pbmcgPSBMUV9ib3NfVW5kZXJ2aXNuaW5nJGFuZGVsLAogICAgICAgICBMUV9ib3NfSGVsc2UgPSBMUV9ib3NfSGVsc2UkYW5kZWwpCmBgYAoKYGBge3J9CkxRX2JvcyA8LSBzeXNzZWxfYm9zICU+JSAKICBzZWxlY3QoYWFyLCBrbmF2biwgTFFfYm9zX0pvcmRicnVrLCBMUV9ib3NfSW5kdXN0cmksIExRX2Jvc19VbmRlcnZpc25pbmcsIExRX2Jvc19IZWxzZSkKYGBgCgpgYGB7cn0KTFFfYm9zW2lzLm5hKExRX2JvcyldID0gMApgYGAKCgoKRm9yIHJlZ2lvbiBIYXVnYWxhbmQ6CgpgYGB7ciBobGRfYm9zX0Vpcl9Fcn0KaGxkX2Jvc19MUSA8LSBobGRfYm9zICU+JSAKICBtdXRhdGUoRWlyX0VyX0pvcmRicnVrID0gYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0VsX1Zhbm5fUmVubyA9IGBFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbmAvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0J5Z2dfb2dfQW5sZWdnID0gYEJ5Z2dlLSBvZyBBbm5sZWdnc3Zpcmtzb21oZXRgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9GaW5hbnMgPSBgRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmdgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9VbmRlcnZpc25pbmcgPSBVbmRlcnZpc25pbmcvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIAogICAgICAgICBFaW5fRW5fSm9yZGJydWsgPSBuYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKCiAgICAgICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9ib3N0ZWQkSW5kdXN0cmkvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAoKICAgICAgICAgRWluX0VuX0VsX1Zhbm5fUmVubyA9IG5hc2pvbmFsdF9ib3N0ZWQkYEVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIAogICAgICAgICBFaW5fRW5fQnlnZ19vZ19BbmxlZ2cgPSBuYXNqb25hbHRfYm9zdGVkJGBCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXRgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgCiAgICAgICAgIEVpbl9Fbl9GaW5hbnMgPSBuYXNqb25hbHRfYm9zdGVkJGBGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZ2AvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICAKICAgICAgICAgRWluX0VuX1VuZGVydmlzbmluZyA9IG5hc2pvbmFsdF9ib3N0ZWQkVW5kZXJ2aXNuaW5nL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgCiAgICAgICAgIEVpbl9Fbl9IZWxzZSA9IG5hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgCiAgICAgICAgIExRX1ByaW3DpnIgPSBFaXJfRXJfSm9yZGJydWsvRWluX0VuX0pvcmRicnVrLAogICAgICAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaS9FaW5fRW5fSW5kdXN0cmksCiAgICAgICAgIExRX0VsX1Zhbm5fUmVubyA9IEVpcl9Fcl9FbF9WYW5uX1Jlbm8vRWluX0VuX0VsX1Zhbm5fUmVubywKICAgICAgICAgTFFfQnlnZ19vZ19BbmxlZ2cgPSBFaXJfRXJfQnlnZ19vZ19BbmxlZ2cvRWluX0VuX0J5Z2dfb2dfQW5sZWdnLAogICAgICAgICBMUV9GaW5hbnMgPSBFaXJfRXJfRmluYW5zL0Vpbl9Fbl9GaW5hbnMsCiAgICAgICAgIExRX1VuZGVydmlzbmluZyA9IEVpcl9Fcl9VbmRlcnZpc25pbmcvRWluX0VuX1VuZGVydmlzbmluZywKICAgICAgICAgTFFfSGVsc2UgPSBFaXJfRXJfSGVsc2UvRWluX0VuX0hlbHNlCikgJT4lIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9FbF9WYW5uX1Jlbm8sIExRX0J5Z2dfb2dfQW5sZWdnLCBMUV9GaW5hbnMsIExRX1VuZGVydmlzbmluZywgTFFfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZShobGRfYm9zX0xRLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSm9yZGJydWsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiVmFubiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJCeWdnIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbmFucyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbmRlcnYuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JQogIGFkZF9oZWFkZXJfYWJvdmUoYygiTG9rYWxrdm90aWVudCwgcmVnaW9uOiBIYXVnYWxhbmRldCI9OSkpCmBgYAoKCiMjIyBHSU5JIFJlZ2lvbmFsdG5pdsOlCiMjIyMgSGF1Z2FsYW5kZXQKCgpgYGB7cn0KaGxkX2Jvc19HSU5JIDwtIGhsZF9ib3MgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoaGxkX2JvcyRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9uYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gaGxkX2JvcyRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKGhsZF9ib3MkSW5kdXN0cmkvbmFzam9uYWx0X2Jvc3RlZCRJbmR1c3RyaSAtIGhsZF9ib3MkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChobGRfYm9zJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIGhsZF9ib3MkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpobGRfYm9zX0dJTkkgPC0gaGxkX2Jvc19HSU5JICU+JSAKICBtdXRhdGUoCiAgICBSRElfUHJpbcOmciA9IDEgLyBhYnMoaGxkX2JvcyRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAvIGhsZF9ib3MkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2Jvc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAvIG5hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9JbmR1c3RyaSA9IDEgLyBhYnMoaGxkX2JvcyRJbmR1c3RyaSAvIGhsZF9ib3MkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2Jvc3RlZCRJbmR1c3RyaSAvIG5hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9IZWxzZSA9IDEgLyBhYnMoaGxkX2JvcyRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvaGxkX2JvcyRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApKSAlPiUgCiAgCiAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZShobGRfYm9zX0dJTkksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiR0lOSSIgPSAzLCAiUkRJIiA9IDMpKSAlPiUKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkhhdWdhbGFuZGV0Ij04KSkKYGBgCgojIyMgR0lOSSBLb21tdW5hbHQgbml2w6UKIyMjIyBIYXVnZXN1bmQKCmBgYHtyfQpIYXVnX2Jvc19HSU5JIDwtIHN5c3NlbF9ib3MgJT4lIAogIGZpbHRlcihrbnIgJWluJSAiMTEwNiIpCmBgYAoKYGBge3J9CkhhdWdfYm9zX0dJTkkgPC0gSGF1Z19ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgRWlyX0VyX1ByaW3DpnIgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSW5kdXN0cmkgPSBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoSGF1Z19ib3NfR0lOSSlbWzVdXSA8LSAiw4VyIgpgYGAKCmBgYHtyfQpIYXVnX2Jvc19HSU5JIDwtIEhhdWdfYm9zX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoSGF1Z19ib3NfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9uYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gSGF1Z19ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKEhhdWdfYm9zX0dJTkkkSW5kdXN0cmkvbmFzam9uYWx0X2Jvc3RlZCRJbmR1c3RyaSAtIEhhdWdfYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChIYXVnX2Jvc19HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIEhhdWdfYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpIYXVnX2Jvc19HSU5JIDwtIEhhdWdfYm9zX0dJTkkgJT4lCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKEhhdWdfYm9zX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAgLyBIYXVnX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBuYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSW5kdXN0cmkgPSAxIC8gYWJzKEhhdWdfYm9zX0dJTkkkSW5kdXN0cmkgLyBIYXVnX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkSW5kdXN0cmkgLyBuYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKEhhdWdfYm9zX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL0hhdWdfYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2Jvc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoCiAgSGF1Z19ib3NfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkdJTkkiID0gMywgIlJESSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiSGF1Z2VzdW5kOiBHaW5pICYgUkRJIj04KSkKCmthYmxlKAogIEhhdWdfYm9zX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiRWlyL0VyIiA9IDMsICJFaW4vRW4iID0gMywgIkxRIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJIYXVnZXN1bmQ6IExva2Fsa3ZvdGllbnQiPTExKSkKYGBgCiMjIyBHSU5JIEtvbW11bmFsdCBuaXbDpQojIyMjIEJva24KCmBgYHtyfQpCb2tuX2Jvc19HSU5JIDwtIHN5c3NlbF9ib3MgJT4lIAogIGZpbHRlcihrbnIgJWluJSAiMTE0NSIpCmBgYAoKYGBge3J9CkJva25fYm9zX0dJTkkgPC0gQm9rbl9ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgRWlyX0VyX1ByaW3DpnIgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSW5kdXN0cmkgPSBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoQm9rbl9ib3NfR0lOSSlbWzVdXSA8LSAiw4VyIgpgYGAKCmBgYHtyfQpCb2tuX2Jvc19HSU5JIDwtIEJva25fYm9zX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoQm9rbl9ib3NfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9uYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gQm9rbl9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKEJva25fYm9zX0dJTkkkSW5kdXN0cmkvbmFzam9uYWx0X2Jvc3RlZCRJbmR1c3RyaSAtIEJva25fYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChCb2tuX2Jvc19HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIEJva25fYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpCb2tuX2Jvc19HSU5JIDwtIEJva25fYm9zX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIFJESV9Qcmltw6ZyID0gMSAvIGFicyhCb2tuX2Jvc19HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gQm9rbl9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhCb2tuX2Jvc19HSU5JJEluZHVzdHJpIC8gQm9rbl9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0hlbHNlID0gMSAvIGFicyhCb2tuX2Jvc19HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9Cb2tuX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCkpICU+JSAKICAKICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTYpCmBgYAoKYGBge3J9CmthYmxlKAogIEJva25fYm9zX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkJva246IEdpbmkgJiBSREkiPTgpKQoKa2FibGUoCiAgQm9rbl9ib3NfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJFaXIvRXIiID0gMywgIkVpbi9FbiIgPSAzLCAiTFEiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkJva24iPTExKSkKYGBgCiMjIyBHSU5JIEtvbW11bmFsdCBuaXbDpQojIyMjIFR5c3bDpnIKCmBgYHtyfQpUeXN2X2Jvc19HSU5JIDwtIHN5c3NlbF9ib3MgJT4lIAogIGZpbHRlcihrbnIgJWluJSAiMTE0NiIpCmBgYAoKYGBge3J9ClR5c3ZfYm9zX0dJTkkgPC0gVHlzdl9ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgRWlyX0VyX1ByaW3DpnIgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSW5kdXN0cmkgPSBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoVHlzdl9ib3NfR0lOSSlbWzVdXSA8LSAiw4VyIgpgYGAKCmBgYHtyfQpUeXN2X2Jvc19HSU5JIDwtIFR5c3ZfYm9zX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoVHlzdl9ib3NfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9uYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gVHlzdl9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKFR5c3ZfYm9zX0dJTkkkSW5kdXN0cmkvbmFzam9uYWx0X2Jvc3RlZCRJbmR1c3RyaSAtIFR5c3ZfYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChUeXN2X2Jvc19HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIFR5c3ZfYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpUeXN2X2Jvc19HSU5JIDwtIFR5c3ZfYm9zX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIFJESV9Qcmltw6ZyID0gMSAvIGFicyhUeXN2X2Jvc19HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gVHlzdl9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhUeXN2X2Jvc19HSU5JJEluZHVzdHJpIC8gVHlzdl9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0hlbHNlID0gMSAvIGFicyhUeXN2X2Jvc19HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9UeXN2X2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCkpICU+JSAKICAKICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTYpCmBgYAoKYGBge3J9CmthYmxlKAogIFR5c3ZfYm9zX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIlR5c3bDpnI6IEdpbmkgJiBSREkiPTgpKQoKa2FibGUoCiAgVHlzdl9ib3NfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJFaXIvRXIiID0gMywgIkVpbi9FbiIgPSAzLCAiTFEiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIlR5c3bDpnIiPTExKSkKYGBgCiMjIyBHSU5JIEtvbW11bmFsdCBuaXbDpQojIyMjIEthcm3DuHkKCmBgYHtyfQpLYXJtX2Jvc19HSU5JIDwtIHN5c3NlbF9ib3MgJT4lIAogIGZpbHRlcihrbnIgJWluJSAiMTE0OSIpCmBgYAoKYGBge3J9Ckthcm1fYm9zX0dJTkkgPC0gS2FybV9ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgRWlyX0VyX1ByaW3DpnIgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSW5kdXN0cmkgPSBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoS2FybV9ib3NfR0lOSSlbWzVdXSA8LSAiw4VyIgpgYGAKCmBgYHtyfQpLYXJtX2Jvc19HSU5JIDwtIEthcm1fYm9zX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoS2FybV9ib3NfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9uYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gS2FybV9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKEthcm1fYm9zX0dJTkkkSW5kdXN0cmkvbmFzam9uYWx0X2Jvc3RlZCRJbmR1c3RyaSAtIEthcm1fYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChLYXJtX2Jvc19HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIEthcm1fYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpLYXJtX2Jvc19HSU5JIDwtIEthcm1fYm9zX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIFJESV9Qcmltw6ZyID0gMSAvIGFicyhLYXJtX2Jvc19HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gS2FybV9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhLYXJtX2Jvc19HSU5JJEluZHVzdHJpIC8gS2FybV9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0hlbHNlID0gMSAvIGFicyhLYXJtX2Jvc19HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9LYXJtX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCkpICU+JSAKICAKICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTYpCmBgYAoKYGBge3J9CmthYmxlKAogIEthcm1fYm9zX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkthcm3DuHk6IEdpbmkgJiBSREkiPTgpKQoKa2FibGUoCiAgS2FybV9ib3NfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJFaXIvRXIiID0gMywgIkVpbi9FbiIgPSAzLCAiTFEiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkthcm3DuHkiPTExKSkKYGBgCiMjIyBSZWdpb25hbHRuaXbDpSBTdW5uaG9yZGFsYW5kCgoKYGBge3Igc3VuX2Jvc19FaXJfRXJ9CnN1bl9ib3NfTFEgPC0gc3VuX2JvcyAlPiUgCiAgbXV0YXRlKEVpcl9Fcl9Kb3JkYnJ1ayA9IGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9JbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9FbF9WYW5uX1Jlbm8gPSBgRWxla3RyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb25gL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9CeWdnX29nX0FubGVnZyA9IGBCeWdnZS0gb2cgQW5ubGVnZ3N2aXJrc29taGV0YC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfRmluYW5zID0gYEZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfVW5kZXJ2aXNuaW5nID0gVW5kZXJ2aXNuaW5nL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICAKICAgICAgICAgRWluX0VuX0pvcmRicnVrID0gbmFzam9uYWx0X2Jvc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmAsCgogICAgICAgICBFaW5fRW5fSW5kdXN0cmkgPSBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKCiAgICAgICAgIEVpbl9Fbl9FbF9WYW5uX1Jlbm8gPSBuYXNqb25hbHRfYm9zdGVkJGBFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICAKICAgICAgICAgRWluX0VuX0J5Z2dfb2dfQW5sZWdnID0gbmFzam9uYWx0X2Jvc3RlZCRgQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0YC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIAogICAgICAgICBFaW5fRW5fRmluYW5zID0gbmFzam9uYWx0X2Jvc3RlZCRgRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmdgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgCiAgICAgICAgIEVpbl9Fbl9VbmRlcnZpc25pbmcgPSBuYXNqb25hbHRfYm9zdGVkJFVuZGVydmlzbmluZy9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIAogICAgICAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIAogICAgICAgICBMUV9Qcmltw6ZyID0gRWlyX0VyX0pvcmRicnVrL0Vpbl9Fbl9Kb3JkYnJ1aywKICAgICAgICAgTFFfSW5kdXN0cmkgPSBFaXJfRXJfSW5kdXN0cmkvRWluX0VuX0luZHVzdHJpLAogICAgICAgICBMUV9FbF9WYW5uX1Jlbm8gPSBFaXJfRXJfRWxfVmFubl9SZW5vL0Vpbl9Fbl9FbF9WYW5uX1Jlbm8sCiAgICAgICAgIExRX0J5Z2dfb2dfQW5sZWdnID0gRWlyX0VyX0J5Z2dfb2dfQW5sZWdnL0Vpbl9Fbl9CeWdnX29nX0FubGVnZywKICAgICAgICAgTFFfRmluYW5zID0gRWlyX0VyX0ZpbmFucy9FaW5fRW5fRmluYW5zLAogICAgICAgICBMUV9VbmRlcnZpc25pbmcgPSBFaXJfRXJfVW5kZXJ2aXNuaW5nL0Vpbl9Fbl9VbmRlcnZpc25pbmcsCiAgICAgICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlL0Vpbl9Fbl9IZWxzZQopICU+JSAKICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfRWxfVmFubl9SZW5vLCBMUV9CeWdnX29nX0FubGVnZywgTFFfRmluYW5zLCBMUV9VbmRlcnZpc25pbmcsIExRX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoc3VuX2Jvc19MUSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkpvcmRicnVrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZhbm4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQnlnZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaW5hbnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiVW5kZXJ2LiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkxva2Fsa3ZvdGllbnQsIHJlZ2lvbjogU3VubmhvcmRsYW5kIj05KSkKCmBgYAoKYGBge3J9CnN1bl9ib3NfR0lOSSA8LSBzdW5fYm9zICU+JSAKICBtdXRhdGUoCiAgICBHSU5JX1ByaW3DpnIgPSAoKHN1bl9ib3MkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvbmFzam9uYWx0X2Jvc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAtIHN1bl9ib3MkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0luZHVzdHJpID0gKChzdW5fYm9zJEluZHVzdHJpL25hc2pvbmFsdF9ib3N0ZWQkSW5kdXN0cmkgLSBzdW5fYm9zJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9IZWxzZSA9ICgoc3VuX2JvcyRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2Jvc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAgLSBzdW5fYm9zJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSkKYGBgCgpgYGB7cn0Kc3VuX2Jvc19HSU5JIDwtIHN1bl9ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKHN1bl9ib3MkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBzdW5fYm9zJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBuYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhzdW5fYm9zJEluZHVzdHJpIC8gc3VuX2JvcyRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAKICAgIFJESV9IZWxzZSA9IDEgLyBhYnMoc3VuX2JvcyRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvc3VuX2JvcyRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApKSAlPiUgCiAgCiAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZShzdW5fYm9zX0dJTkksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiR0lOSSIgPSAzLCAiUkRJIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJSZWdpb246IFN1bm5ob3JkbGFuZCI9OCkpCmBgYAoKCgoKIyMjIyBLb21tdW5hbGUgbml2w6UgaSBTdW5uaG9yZGxhbmQgCgojIyMjIyBTdG9yZAoKYGBge3J9ClN0b3JkX2Jvc19HSU5JIDwtIHN5c3NlbF9ib3MgJT4lIAogIGZpbHRlcihrbnIgJWluJSAiNDYxNCIpCmBgYAoKYGBge3J9ClN0b3JkX2Jvc19HSU5JIDwtIFN0b3JkX2Jvc19HSU5JICU+JSAKICBtdXRhdGUoCiAgICBFaXJfRXJfUHJpbcOmciA9IGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fUHJpbcOmciA9IG5hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9ib3N0ZWQkSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9IZWxzZSA9IG5hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBMUV9Qcmltw6ZyID0gRWlyX0VyX1ByaW3DpnIgLyBFaW5fRW5fUHJpbcOmciwKICAgIExRX0luZHVzdHJpID0gRWlyX0VyX0luZHVzdHJpIC8gRWluX0VuX0luZHVzdHJpLAogICAgTFFfSGVsc2UgPSBFaXJfRXJfSGVsc2UgLyBFaW5fRW5fSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz00KQpgYGAKCmBgYHtyfQpuYW1lcyhTdG9yZF9ib3NfR0lOSSlbWzVdXSA8LSAiw4VyIgpgYGAKCmBgYHtyfQpTdG9yZF9ib3NfR0lOSSA8LSBTdG9yZF9ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgR0lOSV9Qcmltw6ZyID0gKChTdG9yZF9ib3NfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9uYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gU3RvcmRfYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0luZHVzdHJpID0gKChTdG9yZF9ib3NfR0lOSSRJbmR1c3RyaS9uYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpIC0gU3RvcmRfYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChTdG9yZF9ib3NfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2Jvc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAgLSBTdG9yZF9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMikpCmBgYAoKYGBge3J9ClN0b3JkX2Jvc19HSU5JIDwtIFN0b3JkX2Jvc19HSU5JICU+JSAKICBtdXRhdGUoCiAgICBSRElfUHJpbcOmciA9IDEgLyBhYnMoU3RvcmRfYm9zX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAgLyBTdG9yZF9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhTdG9yZF9ib3NfR0lOSSRJbmR1c3RyaSAvIFN0b3JkX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkSW5kdXN0cmkgLyBuYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKFN0b3JkX2Jvc19HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9TdG9yZF9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApKSAlPiUgCiAgCiAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZSgKICBTdG9yZF9ib3NfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkdJTkkiID0gMywgIlJESSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiU3RvcmQ6IEdpbmkgJiBSREkiPTgpKQoKa2FibGUoCiAgU3RvcmRfYm9zX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiRWlyL0VyIiA9IDMsICJFaW4vRW4iID0gMywgIkxRIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJTdG9yZDogIj0xMSkpCmBgYAoKCiMjIyMjIEt2aW5uaGVyYWQKCmBgYHtyfQpLdmlubl9ib3NfR0lOSSA8LSBzeXNzZWxfYm9zICU+JSAKICBmaWx0ZXIoa25yICVpbiUgIjQ2MTciKQpgYGAKCmBgYHtyfQpLdmlubl9ib3NfR0lOSSA8LSBLdmlubl9ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgRWlyX0VyX1ByaW3DpnIgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSW5kdXN0cmkgPSBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoS3Zpbm5fYm9zX0dJTkkpW1s1XV0gPC0gIsOFciIKYGBgCgpgYGB7cn0KS3Zpbm5fYm9zX0dJTkkgPC0gS3Zpbm5fYm9zX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoS3Zpbm5fYm9zX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvbmFzam9uYWx0X2Jvc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAtIEt2aW5uX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9JbmR1c3RyaSA9ICgoS3Zpbm5fYm9zX0dJTkkkSW5kdXN0cmkvbmFzam9uYWx0X2Jvc3RlZCRJbmR1c3RyaSAtIEt2aW5uX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9IZWxzZSA9ICgoS3Zpbm5fYm9zX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgIC0gS3Zpbm5fYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpLdmlubl9ib3NfR0lOSSA8LSBLdmlubl9ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKEt2aW5uX2Jvc19HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gS3Zpbm5fYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2Jvc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAvIG5hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9JbmR1c3RyaSA9IDEgLyBhYnMoS3Zpbm5fYm9zX0dJTkkkSW5kdXN0cmkgLyBLdmlubl9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0hlbHNlID0gMSAvIGFicyhLdmlubl9ib3NfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvS3Zpbm5fYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2Jvc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoCiAgS3Zpbm5fYm9zX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkt2aW5uaGVyYWQ6IEdpbmkgJiBSREkiPTgpKQoKa2FibGUoCiAgS3Zpbm5fYm9zX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiRWlyL0VyIiA9IDMsICJFaW4vRW4iID0gMywgIkxRIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJLdmlubmhlcmFkOiAiPTExKSkKYGBgCgojIyMjIyBCw7htbG8KCmBgYHtyfQpCw7htbG9fYm9zX0dJTkkgPC0gc3lzc2VsX2JvcyAlPiUgCiAgZmlsdGVyKGtuciAlaW4lICI0NjEzIikKYGBgCgpgYGB7cn0KQsO4bWxvX2Jvc19HSU5JIDwtIELDuG1sb19ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgRWlyX0VyX1ByaW3DpnIgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSW5kdXN0cmkgPSBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoQsO4bWxvX2Jvc19HSU5JKVtbNV1dIDwtICLDhXIiCmBgYAoKYGBge3J9CkLDuG1sb19ib3NfR0lOSSA8LSBCw7htbG9fYm9zX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoQsO4bWxvX2Jvc19HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL25hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLSBCw7htbG9fYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0luZHVzdHJpID0gKChCw7htbG9fYm9zX0dJTkkkSW5kdXN0cmkvbmFzam9uYWx0X2Jvc3RlZCRJbmR1c3RyaSAtIELDuG1sb19ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSGVsc2UgPSAoKELDuG1sb19ib3NfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2Jvc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAgLSBCw7htbG9fYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpCw7htbG9fYm9zX0dJTkkgPC0gQsO4bWxvX2Jvc19HSU5JICU+JSAKICBtdXRhdGUoCiAgICBSRElfUHJpbcOmciA9IDEgLyBhYnMoQsO4bWxvX2Jvc19HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gQsO4bWxvX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBuYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSW5kdXN0cmkgPSAxIC8gYWJzKELDuG1sb19ib3NfR0lOSSRJbmR1c3RyaSAvIELDuG1sb19ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0hlbHNlID0gMSAvIGFicyhCw7htbG9fYm9zX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL0LDuG1sb19ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApKSAlPiUgCiAgCiAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZSgKICBCw7htbG9fYm9zX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkLDuG1sbzogR2luaSAmIFJESSI9OCkpCgprYWJsZSgKICBCw7htbG9fYm9zX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiRWlyL0VyIiA9IDMsICJFaW4vRW4iID0gMywgIkxRIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJCw7htbG86Ij0xMSkpCmBgYAoKIyMjIyMgU3ZlaW8KCmBgYHtyfQpTdmVpb19ib3NfR0lOSSA8LSBzeXNzZWxfYm9zICU+JSAKICBmaWx0ZXIoa25yICVpbiUgIjQ2MTIiKQpgYGAKCmBgYHtyfQpTdmVpb19ib3NfR0lOSSA8LSBTdmVpb19ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgRWlyX0VyX1ByaW3DpnIgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSW5kdXN0cmkgPSBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoU3ZlaW9fYm9zX0dJTkkpW1s1XV0gPC0gIsOFciIKYGBgCgpgYGB7cn0KU3ZlaW9fYm9zX0dJTkkgPC0gU3ZlaW9fYm9zX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoU3ZlaW9fYm9zX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvbmFzam9uYWx0X2Jvc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAtIFN2ZWlvX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9JbmR1c3RyaSA9ICgoU3ZlaW9fYm9zX0dJTkkkSW5kdXN0cmkvbmFzam9uYWx0X2Jvc3RlZCRJbmR1c3RyaSAtIFN2ZWlvX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9IZWxzZSA9ICgoU3ZlaW9fYm9zX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgIC0gU3ZlaW9fYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpTdmVpb19ib3NfR0lOSSA8LSBTdmVpb19ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKFN2ZWlvX2Jvc19HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gU3ZlaW9fYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2Jvc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAvIG5hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9JbmR1c3RyaSA9IDEgLyBhYnMoU3ZlaW9fYm9zX0dJTkkkSW5kdXN0cmkgLyBTdmVpb19ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0hlbHNlID0gMSAvIGFicyhTdmVpb19ib3NfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvU3ZlaW9fYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2Jvc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoCiAgU3ZlaW9fYm9zX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIlN2ZWlvOiBHaW5pICYgUkRJIj04KSkKCmthYmxlKAogIFN2ZWlvX2Jvc19HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkVpci9FciIgPSAzLCAiRWluL0VuIiA9IDMsICJMUSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiU3ZlaW86Ij0xMSkpCmBgYAoKCiMjIyBSZWdpbm9uYWx0IG5pdsOlIEhhcmRhbmdlcgoKYGBge3IgaGFyX2Jvc19FaXJfRXJ9Cmhhcl9ib3NfTFEgPC0gaGFyX2JvcyAlPiUgCiAgbXV0YXRlKEVpcl9Fcl9Kb3JkYnJ1ayA9IGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9JbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9FbF9WYW5uX1Jlbm8gPSBgRWxla3RyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb25gL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9CeWdnX29nX0FubGVnZyA9IGBCeWdnZS0gb2cgQW5ubGVnZ3N2aXJrc29taGV0YC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfRmluYW5zID0gYEZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfVW5kZXJ2aXNuaW5nID0gVW5kZXJ2aXNuaW5nL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICAKICAgICAgICAgRWluX0VuX0pvcmRicnVrID0gbmFzam9uYWx0X2Jvc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmAsCgogICAgICAgICBFaW5fRW5fSW5kdXN0cmkgPSBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKCiAgICAgICAgIEVpbl9Fbl9FbF9WYW5uX1Jlbm8gPSBuYXNqb25hbHRfYm9zdGVkJGBFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICAKICAgICAgICAgRWluX0VuX0J5Z2dfb2dfQW5sZWdnID0gbmFzam9uYWx0X2Jvc3RlZCRgQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0YC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIAogICAgICAgICBFaW5fRW5fRmluYW5zID0gbmFzam9uYWx0X2Jvc3RlZCRgRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmdgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgCiAgICAgICAgIEVpbl9Fbl9VbmRlcnZpc25pbmcgPSBuYXNqb25hbHRfYm9zdGVkJFVuZGVydmlzbmluZy9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIAogICAgICAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIAogICAgICAgICBMUV9Qcmltw6ZyID0gRWlyX0VyX0pvcmRicnVrL0Vpbl9Fbl9Kb3JkYnJ1aywKICAgICAgICAgTFFfSW5kdXN0cmkgPSBFaXJfRXJfSW5kdXN0cmkvRWluX0VuX0luZHVzdHJpLAogICAgICAgICBMUV9FbF9WYW5uX1Jlbm8gPSBFaXJfRXJfRWxfVmFubl9SZW5vL0Vpbl9Fbl9FbF9WYW5uX1Jlbm8sCiAgICAgICAgIExRX0J5Z2dfb2dfQW5sZWdnID0gRWlyX0VyX0J5Z2dfb2dfQW5sZWdnL0Vpbl9Fbl9CeWdnX29nX0FubGVnZywKICAgICAgICAgTFFfRmluYW5zID0gRWlyX0VyX0ZpbmFucy9FaW5fRW5fRmluYW5zLAogICAgICAgICBMUV9VbmRlcnZpc25pbmcgPSBFaXJfRXJfVW5kZXJ2aXNuaW5nL0Vpbl9Fbl9VbmRlcnZpc25pbmcsCiAgICAgICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlL0Vpbl9Fbl9IZWxzZQopICU+JSAKICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfRWxfVmFubl9SZW5vLCBMUV9CeWdnX29nX0FubGVnZywgTFFfRmluYW5zLCBMUV9VbmRlcnZpc25pbmcsIExRX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoaGxkX2Jvc19MUSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkpvcmRicnVrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZhbm4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQnlnZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaW5hbnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiVW5kZXJ2LiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkxva2Fsa3ZvdGllbnQsIHJlZ2lvbjogSGFyZGFuZ2VyIj05KSkKCmBgYAoKYGBge3J9Cmhhcl9ib3NfR0lOSSA8LSBoYXJfYm9zICU+JSAKICBtdXRhdGUoCiAgICBHSU5JX1ByaW3DpnIgPSAoKGhhcl9ib3MkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvbmFzam9uYWx0X2Jvc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAtIGhhcl9ib3MkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0luZHVzdHJpID0gKChoYXJfYm9zJEluZHVzdHJpL25hc2pvbmFsdF9ib3N0ZWQkSW5kdXN0cmkgLSBoYXJfYm9zJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9IZWxzZSA9ICgoaGFyX2JvcyRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2Jvc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAgLSBoYXJfYm9zJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSkKYGBgCgpgYGB7cn0KaGFyX2Jvc19HSU5JIDwtIGhhcl9ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKGhhcl9ib3MkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBoYXJfYm9zJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBuYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhoYXJfYm9zJEluZHVzdHJpIC8gaGFyX2JvcyRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAKICAgIFJESV9IZWxzZSA9IDEgLyBhYnMoaGFyX2JvcyRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvaGFyX2JvcyRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApKSAgJT4lCiAgCiAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZShoYXJfYm9zX0dJTkksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiR0lOSSIgPSAzLCAiUkRJIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJSZWdpb246IEhhcmRhbmdlciI9OCkpCmBgYAoKCiMjIyMgS29tbXVuYWxlIG5pdsOlIGkgSGFyZGFuZ2VyCgojIyMjIyBPZGRhCgpgYGB7cn0KbmFzam9fYm9zX3JlZCA8LSBuYXNqb25hbHRfYm9zdGVkICU+JSAKICBmaWx0ZXIoYWFyICVpbiUgYygyMDA4OjIwMTkpKQpgYGAKCmBgYHtyfQpPZGRhX2Jvc19HSU5JIDwtIHN5c3NlbF9ib3MgJT4lIAogIGZpbHRlcihrbnIgJWluJSAiMTIyOCIpCmBgYAoKYGBge3J9Ck9kZGFfYm9zX0dJTkkgPC0gT2RkYV9ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgRWlyX0VyX1ByaW3DpnIgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb19ib3NfcmVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSW5kdXN0cmkgPSBuYXNqb19ib3NfcmVkJEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb19ib3NfcmVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoT2RkYV9ib3NfR0lOSSlbWzVdXSA8LSAiw4VyIgpgYGAKCmBgYHtyfQpPZGRhX2Jvc19HSU5JIDwtIE9kZGFfYm9zX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoT2RkYV9ib3NfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9uYXNqb19ib3NfcmVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gT2RkYV9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvX2Jvc19yZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKE9kZGFfYm9zX0dJTkkkSW5kdXN0cmkvbmFzam9fYm9zX3JlZCRJbmR1c3RyaSAtIE9kZGFfYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb19ib3NfcmVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChPZGRhX2Jvc19HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb19ib3NfcmVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIE9kZGFfYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb19ib3NfcmVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpPZGRhX2Jvc19HSU5JIDwtIE9kZGFfYm9zX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIFJESV9Qcmltw6ZyID0gMSAvIGFicyhPZGRhX2Jvc19HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gT2RkYV9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb19ib3NfcmVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9fYm9zX3JlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhPZGRhX2Jvc19HSU5JJEluZHVzdHJpIC8gT2RkYV9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb19ib3NfcmVkJEluZHVzdHJpIC8gbmFzam9fYm9zX3JlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0hlbHNlID0gMSAvIGFicyhPZGRhX2Jvc19HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9PZGRhX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvX2Jvc19yZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvX2Jvc19yZWQkYEFsbGUgTsOmcmluZ2VyYCkpICU+JSAKICAKICBzZWxlY3QoIMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZSgKICBPZGRhX2Jvc19HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiR0lOSSIgPSAzLCAiUkRJIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJPZGRhKC0yMDE5KTogR2luaSAmIFJESSI9OCkpCgprYWJsZSgKICBPZGRhX2Jvc19HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkVpci9FciIgPSAzLCAiRWluL0VuIiA9IDMsICJMUSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiT2RkYSgtMjAxOSkiPTExKSkKYGBgCgojIyMjIyBVbGxlbnN2YW5nCgpgYGB7cn0KVWxsZW5fYm9zX0dJTkkgPC0gc3lzc2VsX2JvcyAlPiUgCiAgZmlsdGVyKGtuciAlaW4lICI0NjE4IikKYGBgCgpgYGB7cn0KVWxsZW5fYm9zX0dJTkkgPC0gVWxsZW5fYm9zX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEVpcl9Fcl9Qcmltw6ZyID0gYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9JbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSGVsc2UgPSBgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9Qcmltw6ZyID0gbmFzam9uYWx0X2Jvc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX0luZHVzdHJpID0gbmFzam9uYWx0X2Jvc3RlZCRJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX0hlbHNlID0gbmFzam9uYWx0X2Jvc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIExRX1ByaW3DpnIgPSBFaXJfRXJfUHJpbcOmciAvIEVpbl9Fbl9Qcmltw6ZyLAogICAgTFFfSW5kdXN0cmkgPSBFaXJfRXJfSW5kdXN0cmkgLyBFaW5fRW5fSW5kdXN0cmksCiAgICBMUV9IZWxzZSA9IEVpcl9Fcl9IZWxzZSAvIEVpbl9Fbl9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTQpCmBgYAoKYGBge3J9Cm5hbWVzKFVsbGVuX2Jvc19HSU5JKVtbNV1dIDwtICLDhXIiCmBgYAoKYGBge3J9ClVsbGVuX2Jvc19HSU5JIDwtIFVsbGVuX2Jvc19HSU5JICU+JSAKICBtdXRhdGUoCiAgICBHSU5JX1ByaW3DpnIgPSAoKFVsbGVuX2Jvc19HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL25hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLSBVbGxlbl9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKFVsbGVuX2Jvc19HSU5JJEluZHVzdHJpL25hc2pvbmFsdF9ib3N0ZWQkSW5kdXN0cmkgLSBVbGxlbl9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSGVsc2UgPSAoKFVsbGVuX2Jvc19HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIFVsbGVuX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSkKYGBgCgpgYGB7cn0KVWxsZW5fYm9zX0dJTkkgPC0gVWxsZW5fYm9zX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIFJESV9Qcmltw6ZyID0gMSAvIGFicyhVbGxlbl9ib3NfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYCAvIFVsbGVuX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBuYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSW5kdXN0cmkgPSAxIC8gYWJzKFVsbGVuX2Jvc19HSU5JJEluZHVzdHJpIC8gVWxsZW5fYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2Jvc3RlZCRJbmR1c3RyaSAvIG5hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9IZWxzZSA9IDEgLyBhYnMoVWxsZW5fYm9zX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL1VsbGVuX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCkpICU+JSAKICAKICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTYpCmBgYAoKYGBge3J9CmthYmxlKAogIFVsbGVuX2Jvc19HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiR0lOSSIgPSAzLCAiUkRJIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJVbGxlbnN2YW5nOiBHaW5pICYgUkRJIj04KSkKCmthYmxlKAogIFVsbGVuX2Jvc19HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkVpci9FciIgPSAzLCAiRWluL0VuIiA9IDMsICJMUSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiVWxsZW5zdmFuZzoiPTExKSkKYGBgCgojIDMgU3lzc2Vsc2V0dGluZyBpIHVsaWtlIG7DpnJpbmdlciwgZXR0ZXIgYm9zdGVkIChNb2RlbGxlciB1bmRlciBhcmJlaWQpCgpOw6UgaGFyIHZpIHNldHQgcMOlIHV0dmlrbGluZ2VuIGF2IGh2b3IgbWFuZ2Ugc29tIGpvYmJlciBpIGtvbW11bmVuZSBldHRlciBkZSA2IG1lc3QgcmVsZXZhbnRlIG7DpnJpbmdlbmUsIGZyYSAyMDA4IHRpbCAyMDIwLCBpIHJlZ2lvbmVuZSBIYXVnYWxhbmRldCwgU3VubmhvcmRsYW5kIG9nIEhhcmRhbmdlci4gVmkgaGFyIG9nc8OlIHNldHQgcMOlIEdpbmkta29lZmZpc2llbnRlbmUgb2cgUkRJLXZlcmRpZW5lIHRpbCB1dHZhbGd0ZSBrb21tdW5lciBvZyBuw6ZyaW5nZXIsIHNhbXQgcHJvYmxlbXN0aWxsaW5nZW4gdmVkIGRpc3NlIHZlcmRpZW5lIGkgZm9yaG9sZCB0aWwgZGF0YWVuZSB2w6VyZXMgb2cgYWdncmVnZXJpbmdzbml2w6VldCB2aSBoYXIuCgpWaWRlcmUgc2thbCB2aSBuw6Ugc2UgcMOlIHV0dmlrbGluZ2VuIGZvciBodm9yIG1hbmdlIHNvbSBib3IgaSBkZSB1bGlrZSBrb21tdW5lbmUgaSByZWdpb25lbmUsIHNvbSBqb2JiZXIgaW5uZW5mb3IgZGUgNiBtZXN0IHJlbGV2YW50ZSBuw6ZyaW5nZW5lLCBHaW5pLWtvZWZmaXNpZW50ZW5lIG9nIFJESS12ZXJkaWVuZSBmb3IgZGV0dGUuIFZpIGJlZ3lubmVyIG1lZCBIYXVnYWxhbmRldC4KCiMjIEhhdWdhbGFuZGV0CgpgYGB7ciBCb3N0ZWRfSGF1Z2FsYW5kZXRfMX0KaGxkX2JvcyAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IMOFciwgeSA9IGBBbGxlIE7DpnJpbmdlcmApKSArCiAgZ2VvbV9saW5lKCkgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxNzogSGF1Z2FsYW5kZXQiKSsKICB5bGFiKCJBbnRhbGwgYW5zYXR0ZSBpICBcbiBhbGxlIG7DpnJpbmdlciIpICsKICB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoYW5nbGU9MCkpKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkKYGBgCgpGaWd1cmVuIHZpc2VyIGF0IGRldCBlciBzdmluZ25pbmdlciBpIGFudGFsbCBhbnNhdHRlIGkgYWxsZSBuw6ZyaW5nZXIgZm9yIHBlcmlvZGVuLCBtZWQgZXQgY2EuIEdqZW5ub21zbml0dCBmb3IgcGVyaW9kZW4gcMOlIDUxLjAwMCBhbnRhbGwgYm9zYXR0ZSBww6UgSGF1Z2FsYW5kZXQgc29tIGVyIHN5c3NlbHNhdHQgaSBhbGxlIG7DpnJpbmdlci4gU3ZpbmduaW5nZW5lIHZhcmllcmVyIGZyYSArLy0gMS41MDAgZnJhIGdqZW5ub21zbml0dGV0IGkgcGVyaW9kZW4sIGRldCBzZXIgbGlrZXZlbCB1dCB0aWwgYXQgc3ZpbmdlbmUgZXIgc3RhYmlsZSBvZyBub3JtYWxlIGV0dGVyc29tIGRldCB2aWwgdsOmcmUgbmF0dXJsaWcgbWVkIGhlbnN5biBww6UgYXQgbnllIGJlZHJpZnRlciBzdGFydGVyIG9wcCBpIHJlZ2lvbmVuLCBiZWRyaWZ0ZXIgc29tIGxlZ2dlciBuZWQgZWxsZXIgYmVkcmlmdGVyIHNvbSByZS1sb2thbGlzZXJlciBzZWcgZXQgYW5uZXQgc3RlZC4KCmBgYHtyIEJvc3RlZF9IYXVnYWxhbmRldF8yfQpzeXNzZWxfYm9zICU+JSAKICBmaWx0ZXIoa25yICVpbiUgYygxMTA2LCAxMTM1LCAxMTQ1LCAxMTQ2LCAxMTQ5LCAxMTUxLCAxMTYwKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBgQWxsZSBOw6ZyaW5nZXJgLCAoYW5nbGU9MCkpKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBnZW9tX2xpbmUoYWVzKGdyb3VwID0ga25hdm4sIGNvbG91ciA9IGtuYXZuKSkgKwogIHNjYWxlX3NpemVfbWFudWFsKHZhbHVlcyA9IGMoc2VxKDIuMCwgMiwgYnkgPSAtMC4xKSkpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDE4OiBIYXVnYWxhbmRldCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSBpICBcbiBhbGxlIG7DpnJpbmdlciIpICsKICB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoYW5nbGU9MCkpKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCkZpZ3VyZW4gdmlzZXIgZW4gb3ZlcnNpa3Qgb3ZlciBhbnRhbGwgYW5zYXR0ZSBpIGFsbGUgbsOmcmluZ2VyIGV0dGVyIGtvbW11bmVyIHDDpSBIYXVnYWxhbmRldC4gRmlndXJlbiB2aXNlciBhdCBlbiByaW1lbGlnIHN0YWJpbCBvZyByZWxhdGl2dCBmbGF0IGt1cnZlIGZvciBrb21tdW5lbmUgVXRzaXJhIG9nIEJva24sIHNhbXQgZm9yIFNhdWRhIG9nIFZpbmRhZmpvcmQuIEZvciBUeXN2w6ZyIHZpc2VyIGZpZ3VyZW4gYXQgZGV0IGVyIGxpdHQgbWVyIHN2aW5nbmluZ2VyLCBtZW4gZGUgZXIgbGF2ZSBzZXR0IGkgZm9yaG9sZCB0aWwga29tbXVuZW5lIEthcm3DuHkgb2cgSGF1Z2VzdW5kLiBEZSB0byBzaXN0bmV2bnRlIGtvbW11bmVuZSBlciBkZSBzdMO4cnN0ZSBpIGRlbm5lIGZvcmJpbmRlbHNlbiBhdiBhbnRhbGwgYW5zYXR0ZSBpIGFsbGUgbsOmcmluZ2VyLCBvZyBkZSB2aWwgZGVyZm9yIG9nc8OlIHbDpnJlIG1lciB1dHNhdHQgZm9yIHN2aW5nbmluZ2VyIGJhc2VydCBww6UgYXQgYW50YWxsIGJlZHJpZnRlciBlciBsYW5ndCBow7h5ZXJlLCBvZyBkYSBtZWQgaGVuc3luIHDDpSBhdCBiZWRyaWZ0ZXIgc29tIHN0YXJ0ZXIgb3BwLCBsZWdnZXIgbmVkIGVsbGVyIHNvbSByZS1sb2thbGlzZXJlciBzZWcuIAoKRGV0IHZpIGltaWRsZXJ0aWQgc2VyIGVyIGF0IEhhdWdlc3VuZCBvZyBLYXJtw7h5IGVyIHPDpSBzdG9yZSBhdCBkZXQgcMOldmlya2VyIGh2b3JkYW4gZGUgbWluZHJlIGtvbW11bmVuZSBzb20gQm9rbiwgVHlzdsOmciwgU2F1ZGEgb2cgVXRzaXJhIGJsaXIgZnJlbXN0aWx0LiBWaSB2ZWxnZXIgZGVyZm9yIMOlIHNraWxsZSB1dCBkZSBzdG9yZSBvZyBtaW5kcmUga29tbXVuZW5lIGZvciBzZWcgc29tIHZpc3QgdmlkZXJlLgoKYGBge3IgaGxkX2Jvc19sb25nfQpobGRfYm9zX2xvbmcgPC0gc3lzc2VsX2JvcyAlPiUKICBwaXZvdF9sb25nZXIoCiAgICBjb2xzID0gYEFsbGUgTsOmcmluZ2VyYDpVb3BwZ2l0dCwKICAgIG5hbWVzX3RvID0gIk7DpnJpbmciLAogICAgdmFsdWVzX3RvID0gIkFuc2F0dGUiKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfSGF1Z2FsYW5kZXRfM19TdMO4cnN0ZV9Cb3N0ZWR9CmhsZF9ib3NfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiSGF1Z2VzdW5kIiwgIkthcm3DuHkiLCAiVmluZGFmam9yZCIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxOTogSGF1Z2FsYW5kZXQ6IEhhdWdlc3VuZCwgS2FybcO4eSBvZyBWaW5kYWZqb3JkIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMykgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCkRlbm5lIGZpZ3VyZW4gc2FtbWVubGlnbmVyIGFudGFsbCBhbnNhdHRlIGkgYWxsZSBuw6ZyaW5nZXIgZm9yIGtvbW11bmVuZSBIYXVnZXN1bmQsIEthcm3DuHkgb2cgVmluZGFmam9yZC4gRmlndXJlbiB2aXNlciBhdCBpIMOlcmV0IDIwMTAsIGVyIGRldCBsYXZlc3RlIMOlcmV0IGZvciBwZXJpb2RlbiBzYW1sZXQgZm9yIGFsbGUgdHJlIGtvbW11bmVuZS4gVmlkZXJlIHZpc2VyIGRlbiBhdCDDpXJldCAyMDE0LCB2YXIgZGV0IGjDuHllc3RlIMOlcmV0IGZvciBwZXJpb2RlbiBzYW1sZXQgZm9yIGFsbGUgdHJlIGtvbW11bmVuZSwgb2cgbGlrZWRhbiB2aXNlciBmaWd1cmVuIGF0IGZyYSAyMDE0LCBoYXIgYWxsZSBrb21tdW5lbmUgZW4gbmVkZ2FuZyBmcmVtIHRpbCAyMDE1LTIwMTYgZsO4ciBkZSB0YXIgc2VnIG9wcCBpZ2plbiBpIDIwMTguIEFsbGUgdHJlIGtvbW11bmVuZSB2aXNlciBkZXQgc2FtbWUgbcO4bnN0ZXJldC4KCmBgYHtyIE7DpnJpbmdfVG90YWxfSGF1Z2FsYW5kZXRfNF9NaW5zdGVfQm9zdGVkfQpobGRfYm9zX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkJva24iLCAiU2F1ZGEiLCAiVHlzdsOmciIsICJVdHNpcmEiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMjA6IEhhdWdhbGFuZGV0OiBCb2tuLCBTYXVkYSBUeXN2w6ZyIG9nIFV0c2lyYSIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpEZW5uZSBmaWd1cmVuIHZpc2VyIGFudGFsbCBhbnNhdHRlIGV0dGVyIGJvc3RlZCBpIGFsbGUgbsOmcmluZ2VyIGZvciBrb21tdW5lbmUgQm9rbiwgU2F1ZGEsIFR5c3bDpnIgb2cgVXRzaXJhLiBLb21tdW5lbmUgQm9rbiBvZyBUeXN2w6ZyIGhhciBzaWRlbiAyMDA4LCBoYXR0IGVuIGdyYWR2aXMsIG1lbiBub2UgdXN0YWJpbCDDuGtuaW5nIGkgYW50YWxsIGFuc2F0dGUsIG1lbnMga29tbXVuZW4gU2F1ZGEgb2cgVXRzaXJhIGhhciBoYXR0IGVuIGdyYWR2aXMgbmVkZ2FuZyBpIGFudGFsbCBhbnNhdHRlLgoKRm9yIMOlIGbDpSBlbiBiZWRyZSBvdmVyc2lrdCBvdmVyIHJlZ2lvbmVuIHPDpSB2ZWxnZXIgdmkgw6Ugc2UgcMOlIHV0dmlrbGluZ2VuIHRpbCBuw6ZyaW5nZW5lIGkga29tbXVuZW5lLCBzb20gdmlzdCBww6UgZmlndXJlbmUgdW5kZXIuCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfSGF1Z2VsYW5kZXRfM19TdMO4cnN0ZV9Cb3N0ZWR9CmhsZF9ib3NfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiSGF1Z2VzdW5kIiwgIkthcm3DuHkiLCAiVmluZGFmam9yZCIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSBjKCJJbmR1c3RyaSIsICJIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIiwgIkZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nIiwgIkVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uIiwgIkJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldCIsICJKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2UiKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDIxOiBIYXVnYWxhbmRldDogSGF1Z2VzdW5kLCBLYXJtw7h5IG9nIFZpbmRhZmpvcmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAzKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3IgTsOmcmluZ3Nmb3JkZWxpbmdfb2dfVXR2aWtsaW5nX0hhdWdlbGFuZGV0XzRfTWluc3RlX0Jvc3RlZH0KaGxkX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJCb2tuIiwgIlNhdWRhIiwgIlR5c3bDpnIiLCAiVXRzaXJhIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lIGMoIkluZHVzdHJpIiwgIkhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXIiLCAiRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmciLCAiRWxla3RyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb24iLCAiQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0IiwgIkpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZSIpKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMjI6IEhhdWdhbGFuZGV0OiBCb2tuLCBTYXVkYSwgVHlzdsOmciBvZyBVdHNpcmEiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKRmlndXJlbmUgdmlzZXIgYW50YWxsIGFuc2F0dGUgZXR0ZXIgYm9zdGVkLCBmb3JkZWx0IGkgdWxpa2UgbsOmcmluZ2VyIGZvciBrb21tdW5lbmUgcMOlIEhhdWdhbGFuZGV0IGZvciBwZXJpb2RlbiAyMDA4IOKAkyAyMDIwLiBIZWxzZS0gb2cgc29zaWFsdGplbmVzdGVyIGVyIGVuIGF2IGRlIHN0w7hyc3RlIG7DpnJpbmdlbmUgZm9yIGFsbGUga29tbXVuZW5lIG9nIGRlbm5lIGVyIGdyYWR2aXMgw7hrZW5kZSBmb3IgYWxsZSBrb21tdW5lbmUgaSBwZXJpb2Rlbi4gSW5kdXN0cmkgZXIgb2dzw6UgYmxhbnQgZGUgc3TDuHJzdGUgbsOmcmluZ2VuZSBmb3IgYWxsZSBkaXNzZSBrb21tdW5lbmUsIG9nIGRlbm5lIG7DpnJpbmdlbiBlciBncmFkdmlzIGZhbGxlbmRlIGZvciBIYXVnZXN1bmQsIEthcm3DuHkgaGFyIGV0IGVuZGEgc3TDuHJyZSBmYWxsIGZvciBkZW5uZSBuw6ZyaW5nZW4gZm9yIHBlcmlvZGVuLCBkYSBzw6ZybGlnIGkgcGVyaW9kZW4gMjAwOC0yMDEwLiBGb3IgVmluZGFmam9yZCBlciBkZW5uZSBuw6ZyaW5nZW4gZ3JhZHZpcyDDuGtlbmRlIGZyZW0gdGlsIDIwMTUsIGbDuHIgZGVuIGRlcmV0dGVyIGdyYWR2aXMgZmFsbGVyIGlnamVuLgoKRm9yIEhhdWdlc3VuZCBvZyBLYXJtw7h5IHNlciB2aSBhdCBuw6ZyaW5nZW4gam9yZGJydWsgb2cgc2tvZ2JydWsgZXIgc8OmcmxpZyBsYXZlIGkgYW50YWxsIGFuc2F0dGUsIG1lbiBmb3IgVmluZGFmam9yZCBlciBkZW5uZSBuw6ZyaW5nZW4gYmV0eWRlbGlnIGjDuHllcmUgZW5uIEhhdWdlc3VuZCBvZyBLYXJtw7h5LiBGb3IgbsOmcmluZ2VuIGZpbmFuc2llcmluZyBvZyBmb3JzaWtyaW5nIGVyIGRlbm5lIGt1cnZlbiBsYXYgb2cgdGlsbsOmcm1ldCBmbGF0IGkgYWxsZSBrb21tdW5lbmUgZm9yIHBlcmlvZGVuLCBvZyBkZXQgc2FtbWUgZm9yIG7DpnJpbmdlbiBlbGVrdHJpc2l0ZXQsIHZhbm4gb2cgcmVub3Zhc2pvbi4gQnlnZy0gb2cgYW5sZWdnc3Zpcmtzb21oZXQgZXIgb2dzw6UgbGF2IGZvciBIYXVnZXN1bmQgb2cgS2FybcO4eSwgbWVuIHNvbSBqb3JkYnJ1ayBvZyBza29nYnJ1aywgZXIgZGVubmUgbsOmcmluZ2VuIGjDuHllcmUgaSBWaW5kYWZqb3JkIHNhbW1lbmxpZ25ldCBtb3Qga29tbXVuZW5lIEhhdWdlc3VuZCBvZyBLYXJtw7h5IHRhdHQgaSBiZXRyYWt0bmluZyBhdCBWaW5kYWZqb3JkIGhhciBldCBiZXR5ZGVsaWcgbGF2ZXJlIGFudGFsbCBhbnNhdHRlIHRvdGFsdCBlbm4gSGF1Z2VzdW5kIG9nIEthcm3DuHkgaGFyLgoKVmkgc2VyIG9nc8OlIHNhbW1lIHRyZW5kZW5lIGZvciBkZSBzbcOlIGtvbW11bmVuZSBww6UgSGF1Z2FsYW5kZXQuIEhlbHNlLSBvZyBzb3NpYWxlIHRqZW5lc3RlciBoYXIgZXN0dCBlbiBzdGFiaWwgdmVrc3QgaSBCb2tuLCBTYXVkYSwgVHlzdsOmciBvZyB1dHNpcmEsIG1lbnMgaW5kdXN0cmllbiBoYXIsIG1lZCB1bm50YWsgYXYgYm9rbiwgc2V0dCBlbiByZWR1a3Nqb24gaSBwZXJpb2RlbiAyMDA4IC0gMjAyMC4gVXRzaXJhIHNraWxsZXIgc2VnIG9nIHV0IG1lZCDDpSBoYXR0IGVuIHN2YWsgdmVrc3QgaSBqb3JkYnJ1aywgc2tvZ2JydWsgb2cgZmlza2UgaSBkZW5uZSBwZXJpb2Rlbi4KCiMjIFN1bm5ob3JkbGFuZAoKVmlkZXJlIHZpbCB2aSBuw6Ugc2UgcMOlIHV0dmlrbGluZ2VuIGZvciByZWdpb24gU3VubmhvcmRsYW5kLgoKYGBge3IgQm9zdGVkX1N1bm5ob3JkbGFuZF8xfQpzdW5fYm9zICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gw4VyLCB5ID0gYEFsbGUgTsOmcmluZ2VyYCkpICsKICBnZW9tX2xpbmUoKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDIzOiBTdW5uaG9yZGFsYW5kIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIGkgIFxuIGFsbGUgbsOmcmluZ2VyIikgKwogIHRoZW1lKGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChhbmdsZT0wKSkrIAogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkKYGBgCgpEZW5uZSBmaWd1cmVuIHZpc2VyIHV0dmlrbGluZ2VuIGF2IGFudGFsbCBzeXNzZWxzYXR0ZSBpIGFsbGUgbsOmcmluZ2VyIGV0dGVyIGJvc3RlZCBpIHJlZ2lvbiBTdW5uaG9yZGxhbmQgZnJhIDIwMDggdGlsIDIwMjAuIFZpIGthbiBzZSB1dGZyYSBncmFmZW4gYXQgcmVnaW9uZW4gaGFkZGUgZW4ga3JhZnRpZyB2ZWtzdCAyMDEwIC0gMjAxNCwgZsO4ciBkZW4gZmFsdCBrcmFmdGlnIGkgMjAxNCAtIDIwMTYsIGbDuHIgcmVnaW9uZW4gaWdqZW4gaGFyIHNldHQgZW4ga3JhZnRpZyB2ZWtzdCAyMDE2IC0gMjAxOS4gVXQgZnJhIGdyYWZlbiBrYW4gZGV0IHNlIHV0IHRpbCBhdCByZWdpb25lbiBpZ2plbiBzdMOlciBvdmVuZm9yIGVuIG55IHJlZHVrc2pvbiBmcmEgMjAxOSBhdi4KClZpIMO4bnNrZXIgw6Ugc2UgdmlkZXJlIHDDpSB1dHZpa2xpbmdlbiBww6Uga29tbXVuYWx0IG5pdsOlLCBzb20gdmlzdCBpIGZpZ3VyIDI0LgoKYGBge3IgQm9zdGVkX1N1bm5ob3JkbGFuZF8yfQpzeXNzZWxfYm9zICU+JSAKICBmaWx0ZXIoa25yICVpbiUgYyg0NjExLCA0NjEyLCA0NjEzLCA0NjE0LCA0NjE1LCA0NjE2LCA0NjE3KSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgZ2VvbV9saW5lKGFlcyhncm91cCA9IGtuYXZuLCBjb2xvdXIgPSBrbmF2bikpICsKICBzY2FsZV9zaXplX21hbnVhbCh2YWx1ZXMgPSBjKHNlcSgyLjAsIDIsIGJ5ID0gLTAuMSkpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkgKwogICBsYWJzKHRpdGxlID0gIkZpZy4gMjQ6IFN1bm5ob3JkbGFuZCIsIHggPSAiw4VyIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKClZpIHNlciB1dCBmcmEgZ3JhZmVuIGhlciBhdCBkZXQgZXIgaSBob3ZlZHNhayBTdG9yZCwgS3Zpbm5oZXJhZCBvZyBCw7htbG8gc29tIGhhciBzZXR0IGRlbiBzdMO4cnN0ZSBzdmluZ25pbmdlbmUgaSBhbnRhbGwgc3lzc2Vsc2F0dGUgZXR0ZXIgYm9zdGVkLiBNZW4gdmkga2FuIG9nc8OlIGtsYXJ0IHNlIGF0IGRpc3NlIDMga29tbXVuZW5lIGFsbGUgaGFkZGUgZXQgZmFsbCBpIDIwMTQsIHNvbSBzYW1zdmFyZXIgbWVkIGZpZ3VyIDIzLiBHcmFmZW4gZXIgaW1pZGxlcnRpZGlnIGlnamVuIGlra2UgdHlkZWxpZyBub2sgcMOlIGdydW5uIGF2IGRlIHN0b3JlIGtvbW11bmVuZSwgb2cgdmkgZnJlbXN0aWxsZXIgZGVybWVkIGdyYWZlbmUgcMOlIGtvbW11bmFsdCBuaXbDpSBoZXIgb2cgZm9yIMOlIHR5ZGVsaWdqZXJlIHV0dmlrbGluZ2VuIHDDpSBrb21tdW5hbHQgbml2w6UuCgpgYGB7ciBzdW5fYm9zX2xvbmd9CnN1bl9ib3NfbG9uZyA8LSBzeXNzZWxfYm9zICU+JQogIHBpdm90X2xvbmdlcigKICAgIGNvbHMgPSBgQWxsZSBOw6ZyaW5nZXJgOlVvcHBnaXR0LAogICAgbmFtZXNfdG8gPSAiTsOmcmluZyIsCiAgICB2YWx1ZXNfdG8gPSAiQW5zYXR0ZSIpCmBgYAoKYGBge3IgTsOmcmluZ19Ub3RhbF9TdW5uaG9yZGxhbmRfM19TdMO4cnN0ZV9Cb3N0ZWR9CnN1bl9ib3NfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiQsO4bWxvIiwgIkt2aW5uaGVyYWQiLCAiU3RvcmQiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMjU6IFN1bm5ob3JkbGFuZDogQsO4bWxvLCBLdmlubmhlcmFkIG9nIFN0b3JkIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMykgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfU3VubmhvcmRsYW5kXzRfTWluc3RlX0Jvc3RlZH0Kc3VuX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJFdG5lIiwgIkZpdGphciIsICJTdmVpbyIsICJUeXNuZXMiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMjY6IFN1bm5ob3JkbGFuZDogRXRuZSwgRml0aGFyLCBTdmVpbyBvZyBUeXNuZXMiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKRmlndXIgMjUgb2cgMjYgdmlzZXIgaGVyIHV0dmlrbGluZ2VuIGkgc3lzc2Vsc2F0dGUgZXR0ZXIgYm9zdGVkIGkgYWxsZSBuw6ZyaW5nZXIgcMOlIGtvbW11bmFsdCBuaXbDpSwgbWVuIG7DpSBlciBodmVyIGtvbW11bmUgc2tpbHQgZnJhIGh2ZXJhbmRyZSBvZyB2aSBmw6VyIGV0IGhlbHQgYW5uZXQgYmlsZGUuIFZpIHNlciBuw6UgcmVkdWtzam9uZW4gaSBkZSB0cmUgc3RvcmUga29tbXVuZW5lIFN0b3JkLCBLdmlubmhlcmFkIG9nIELDuG1sbyBteWUgbWVyIHR5ZGVsaWcgb2cgaHZvciBkcmFzdGlzayBkZW5uZSByZWR1a3Nqb25lbiBoYXIgdsOmcnQuIFZpIHNlciBvZ3PDpSBuw6UgYXQgYsOlZGUgRXRuZSBvZyBUeXNuZXMgb2dzw6UgaGFyIGhhdHQgZW4gcGVyaW9kZSBtZWQga3JhZnRpZyByZWR1a3Nqb24sIG1lZCBFdG5lIDIwMTQgLSAyMDIwIG9nIFR5c25lcyAyMDA4IC0gMjAxMi4gVHlzbmVzIGhhciBzZXR0IGVuIHN2YWsgdmVrc3QgZnJhIDIwMTIsIG1lbnMgZml0amFyIHPDpWcgc3RlcmsgdmVrc3QgMjAwOSAtIDIwMTQgb2cgaGFyIGV0dGVyIDIwMTQgc2V0dCBlbiBzdmFrIHJlZHVrc2pvbi4KClZpIGVyIGZvcnRzYXR0IGlra2UgZm9ybsO4eWQsIGZvciB2aSDDuG5za2VyIMOlIHNlIHDDpSB1dHZpa2xpbmdlbiB0aWwgbm9lbiB1dHZhbGd0ZSBuw6ZyaW5nZXIgaSBrb21tdW5lbmUsIG9nIHNlciBkZXJtZWQgdmlkZXJlIHDDpSBmaWd1ciAyNyBvZyAyOC4KCmBgYHtyIE7DpnJpbmdzZm9yZGVsaW5nX29nX1V0dmlrbGluZ19TdW5uaG9yZGxhbmRfM19TdMO4cnN0ZV9Cb3N0ZWR9CnN1bl9ib3NfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiQsO4bWxvIiwgIlN0b3JkIiwgIkt2aW5uaGVyYWQiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAyNzogU3VubmhvcmRsYW5kOiBCw7htbG8sIEt2aW5uaGVyYWQgb2cgU3RvcmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAzKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3IgTsOmcmluZ3Nmb3JkZWxpbmdfb2dfVXR2aWtsaW5nX1N1bm5ob3JkbGFuZF80X01pbnN0ZV9Cb3N0ZWR9CnN1bl9ib3NfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiRXRuZSIsICJTdmVpbyIsICJGaXRqYXIiLCAiVHlzbmVzIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lIGMoIkluZHVzdHJpIiwgIkhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXIiLCAiRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmciLCAiRWxla3RyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb24iLCAiQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0IiwgIkpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZSIpKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMjg6IFN1bm5ob3JkbGFuZDogRXRuZSwgRml0amFyLCBTdmVpbyBvZyBUeXNuZXMiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKRGlzc2UgZmlndXJlbmUsIDI3IG9nIDI4LCB2aXNlciB1dHZpa2xpbmdlbiBhdiBzeXNzZWxzYXR0ZSBldHRlciBib3N0ZWQsIHDDpSBrb21tdW5hbHQgbml2w6UgaSBTdW5uaG9yZGxhbmRzcmVnaW9uZW4gMjAwOCAtIDIwMjAuCgpWaSBzZXIgbsOlIGVuIHRyZW5kIGZvciBTdG9yZCwgQsO4bWxvIG9nIEt2aW5uaGVyYWQuIEFsbGUgZGlzc2UgdHJlIGtvbW11bmVuZSBoYWRkZSBldCBrcmFmdGlnIGZhbGwgaSAyMDE0LiBLdmlubmhlcmFkIGhhZGRlIGFsbGVyZWRlIGVuIGpldm4gcmVkdWtzam9uIGkgaW5kdXN0cmkgZnJlbSB0aWwgMjAxNCwgbWVuIGhhZGRlIGxpa2V2ZWxsIGV0IGtyYWZ0aWcgZmFsbCBoZXIsIHNhbW1lbiBtZWQgU3RvcmQgb2cgQsO4bWxvLiBSZWR1a3Nqb25lbiBpIGluZHVzdHJpIGZvciBLdmlubmhlcmFkIGVyIG1lc3Qgc2FubnN5bmVsaWcgc3RlbmdpbmcgYXYgIkItaGFsbGVuIiBww6UgU8O4ci1Ob3JnZSBBbHVtaW5pdW0gQVMgaSAyMDA4IGVuIGF2IGZha3RvcmVuZS4KClZpIHPDpWcgYWtrdXJhdHQgc2FtbWUgZmFsbGV0IG7DpXIgdmkgc8OlZyBww6Ugc3lzc2Vsc2V0dGluZyBldHRlciBhcmJlaWRzc3RlZCB0aWRsZWdlcmUgaSByYXBwb3J0ZW4uIERldHRlIGtvbW1lciBtZXN0IHNhbm5zeW5lbGlnIGF2IG9samUta25la2tldCBpIDIwMTQuIEFrZXIgU29sdXRpb25zLCBzb20gZGV0IGhldGVyIGkgZGFnLCBlciBibGFudCBTdW5uaG9yZGxhbmRzIHN0w7hyc3RlIGFyYmVpZHNwbGFzc2VyLCBvZyBkZXQgZXIgZmxlcmUgc29tIHBlbmRsZXIgZnJhIGLDpWRlIEt2aW5uaGVyYWQgb2cgQsO4bWxvIHNvbSBqb2JiZXIgcMOlIEFrZXIgU29sdXRpb25zLiBEZXQgZXIgZGVybWVkIG5hdHVybGlnIGF0IGTDpXJsaWdlIHRpZGVyIGkgb2xqZS1pbmR1c3RyaWVuIHZpbCBww6V2aXJrZSBBa2VyIHNvbSBpZ2plbiB2aWwgcMOldmlya2Uga29tbXVuZW5lIHNvbSBoYXIgc3lzc2Vsc2V0dGUgaSBkZW5uZSBuw6ZyaW5nYS4gVmkgc2VyIGVuZGEgZXQgZmFsbCBpIEt2aW5uaGVyYWQgaW5uZW4gaW5kdXN0cmkgaSAyMDE2LCBvZyBkZXR0ZSBrb21tZXIgbWVzdCBzYW5uc3luZWxpZyBhdiBhdCBFaWRlIE1hcmluZSBTZXJ2aWNlIHDDpSBIYWxzbsO4eSBibGVpIHNsw6V0dCBrb25rdXJzIGRldHRlIMOlcmV0LgoKQWxsZSBrb21tdW5lbmUgaSByZWdpb24gU3VubmhvcmRsYW5kIGhhciBvZ3PDpSBzZXR0IGVuIHZla3N0IGlubmVuIGhlbHNlLSBvZyBzb3NpYWxldGplbmVzdGVyIGkgcGVyaW9kZW4gMjAwOCAtIDIwMjAuIEt2aW5uaGVyYWQsIELDuG1sbywgU3RvcmQsIEZpdGphciBvZyBUeXNuZXMgaGFyIHNldHQgZW4gdmVrc3QgaW5uZW4gam9yZGJydWssIHNrb2dicnVrIG9nIGZpc2tlLiBNZXN0IHNhbm5zeW5lbGlnIGVyIGZpc2tlIGVuIHN0b3IgZGVsIGF2IHZla3N0ZW4gZGEgQWxzYWtlciBGam9yZGJydWsgaGFyIGVrc3BhbmRlcnQgaSBkaXNzZSBrb21tdW5lbmUgaSBkZW5uZSBwZXJpb2Rlbi4gQnlnZ2UtIG9nIEFubmxlZ2dzdmlya3NvbWhldCBoYXIgb2dzw6UgaGF0dCBlbiBsaXRlbiB2ZWtzdCBpIGZsZXJlIGtvbW11bmVyLCBtZW5zIGZpbmFucyByZWxhdGVydCBha3Rpdml0ZXQgaGFyIHNldHQgZW4gamV2biByZWR1a3Nqb24gaSBoZWxlIHJlZ2lvbmVuLgoKIyMgSGFyZGFuZ2VyCgpTaXN0ZSByZWdpb25lbiB2aSDDuG5za2VyIMOlIHNlIHDDpSBlciBIYXJkYW5nZXIsIG1lciBzcGVzaWZpa3QgT2RkYSBmcmVtIHRpbCAyMDE5IG9nIFVsbGVuc3ZhbmcgZnJlbSB0aWwgMjAyMC4gVmkgaGFyIGlra2UgdGF0dCBtZWQgSm9uZGFsIGkgSGFyZGFuZ2VyIGZyZW0gdGlsIDIwMTkuIElnamVuIHPDpSBzZXIgdmkgbsOlIHDDpSBzeXNzZWxzZXR0aW5nIGV0dGVyIGJvc3RlZC4KClZpIHNlciBmw7hyc3QgcMOlIGhlbGUgcmVnaW9uZW4gc2FtbGV0LCBqZi4gZmlndXIgMjkuCgpgYGB7ciBCb3N0ZWRfSGFyZGFuZ2VyXzF9Cmhhcl9ib3MgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSDDhXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMjk6IEhhcmRhbmdlciIsIHk9ICJBbGxlIE7DpnJpbmdlciIpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDEpKQpgYGAKCkRlbm5lIGZpZ3VyZW4gdmlzZXIgdXR2aWtsaW5nZW4gaSBzeXNzZWxzZXR0aW5nIGV0dGVyIGJvc3RlZCwgaSBoZWxlIHJlZ2lvbmVuLCBvZyBoZXIgZXIgZGV0IG5vZSBzb20gYsO4ciBiZW1lcmtlcy4gRsO4cnN0IG9nIGZyZW1zdCBzaWRlbiBKb25kYWwgaWtrZSB2YXIgZW4gZGVsIGF2IGRhdGFlbmUgZnJlbSB0aWwgMjAxOSwgbWVuIGJsaXIgdGF0dCBtZWQgaSBVbGxlbnN2YW5nIGkgMjAyMCBzw6UgdmlsIHZpIHNlIGVuIHVuYXR1cmxpZyB2ZWtzdCBpIGRlbm5lIGZpZ3VyZW4gaSAyMDIwLiBEZXR0ZSBlciBlbiBzdmFraGV0IGkgbW9kZWxsZW4gb2cgZGF0YWVuZSB2w6VyZXMuIERldCBhbmRyZSBlciBhdCB2aSBrYW4gc2UgZW4ga2xhciBuZWdhdGl2IHV0dmlrbGluZyBpIEhhcmRhbmdlciBmcmVtIHRpbCAyMDE5LgoKRm9yIMOlIGlsbHVzdHJlcmUgdXR2aWtsaW5nZW4gYmVkcmUsIHPDpSBza2lsbGVyIHZpIG1lbGxvbSBPZGRhIG9nIFVsbGVuc3ZhbmcgdmVkIG5lc3RlIGZpZ3VyLgoKYGBge3IgQm9zdGVkX0hhcmRhbmdlcl8yfQpzeXNzZWxfYm9zICU+JSAKICBmaWx0ZXIoa25yICVpbiUgYyg0NjE4LCAxMjI4KSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgZ2VvbV9saW5lKGFlcyhncm91cCA9IGtuYXZuLCBjb2xvdXIgPSBrbmF2bikpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoJyMxMTExMTEnLCcjMDU0OTg3JykpICsKICBzY2FsZV9zaXplX21hbnVhbCh2YWx1ZXMgPSBjKHNlcSgyLjAsIDIsIGJ5ID0gLTAuMSkpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkgKwogICBsYWJzKHRpdGxlID0gIkZpZy4gMzA6IEhhcmRhbmdlciIsIHggPSAiw4VyIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKClZpIHNlciBuw6UgcMOlIGRlbm5lIGZpZ3VyZW4gYXQgYsOlZGUgT2RkYSBvZyBVbGxlbnN2YW5nIGhhciBoYXR0IGVuIG5lZ2F0aXYgdXR2aWtsaW5nIGZyZW0gdGlsIG9nIG1lZCAyMDE5LiBWaSBzZXIgb2dzw6UgcHJvYmxlbXN0aWxsaW5nZW4gbWVkIMOlIGlra2UgdGEgbWVkIEpvbmRhbCB1bmRlciBIYXJkYW5nZXIga29tbWVyIHR5ZGVsaWdlcmUgZnJlbSBuw6UgbWVkIGVuIGVrc3RyZW0gdmVrc3QgZXR0ZXIgc2FtbWVuc2zDpWluZ2VuIG1lbGxvbSBPZGRhLCBKb25kYWwgb2cgVWxsZW5zdmFuZyBpIDIwMjAuIEbDuHIgdmkgdmVsZ2VyIMOlIHNlIHDDpSB1dHZhbGd0ZSBuw6ZyaW5nZXIgaSBodmVyIGtvbW11bmUsIHZlbGdlciB2aSBmw7hyc3Qgw6UgZGVsZSBrb21tdW5lbmUgb3BwIGh2ZXIgZm9yIHNlZywgc2xpayBhdCB2aSBrYW4gc2UgdXR2aWtsaW5nZW4gbWVyIGRyYXN0aXNrLgoKYGBge3IgaGFyX2Jvc19sb25nfQpoYXJfYm9zX2xvbmcgPC0gc3lzc2VsX2JvcyAlPiUKICBwaXZvdF9sb25nZXIoCiAgICBjb2xzID0gYEFsbGUgTsOmcmluZ2VyYDpVb3BwZ2l0dCwKICAgIG5hbWVzX3RvID0gIk7DpnJpbmciLAogICAgdmFsdWVzX3RvID0gIkFuc2F0dGUiKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfSGFyZGFuZ2VyX0Jvc3RlZH0KaGFyX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJPZGRhIiwgIlVsbGVuc3ZhbmciKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMzE6IEhhcmRhbmdlcjogT2RkYSBvZyBVbGxlbnN2YW5nIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKClZpIHNlciBoZXIgdHlkZWxpZyB1dHZpa2xpbmdlbiB0aWwgc3Blc3NpZWx0IE9kZGEsIHNvbSBiZXJyZSBzdHVwZXIgbmVkLCB1dGVuIHRlZ24gdGlsIMOlIHNudSBtZWQgZGV0IGbDuHJzdGUuIEZvciDDpSBzZSB1dHZpa2xpbmdlbiB0eWRsaWdlcmUgc8OlIGRlbGVyIHZpIGlnamVuIG9wcCBpIG5vZW4gdXR2YWxndGUgbsOmcmluZ2VyIGkgaHZlciBrb21tdW5lLCBqZi4gZmlndXIgMzIuCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfSGFyZGFuZ2VyX0Jvc3RlZH0KaGFyX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJPZGRhIiwgIlVsbGVuc3ZhbmciKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAzMjogSGFyZGFuZ2VyOiBPZGRhLCBVbGxlbnN2YW5nIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKClZpIHNlciBww6UgZGVubmUgZmlndXJlbiB1dHZpa2xpbmdlbiBhdiA2IHVsaWtlIG7DpnJpbmdhciwgbWVkIGhlbnN5biBww6Ugc3lzc3NlbHNldHRpbmcgZXR0ZXIgYm9zdGVkLCBpIEhhcmRhbmdlciBpIGRlbm5lIHBlcmlvZGVuLiBWaSBzZXIgc2FtbWUgdHJlbmRlciBoZXIgaSBIYXJkYW5nZXIgc29tIHZpIGdqb3JlIGZvciBiw6VkZSBTdW5uaG9yZGxhbmQgb2cgSGF1Z2FsYW5kZXQ6IHJlZHVrc2pvbiBpIGluZHVzdHJpIG9nIHByaW3DpnJuw6ZyaW5nYW5lLCBtZW5zIHZpIHNlciBlbiB2ZWtzdCBpIGhlbHNldGplbmVzdGVyLiBEZXQgc29tIGVyIGxpdHQgaW50ZXJlc3NhbnQgw6UgYmVtZXJrZSBlciBhdCBPZGRhIHPDpWcgZW4gdmVrc3QgaSBpbmR1c3RyaSBmcmEgMjAxNiB0aWwgMjAxOSwgbWVuIGdydW5uYSBzYW1tZW5zbMOlaW5nZW4gZXIgZGV0IHZhbnNrZWxpZyDDpSBzaSBub2Ugb20gdXR2aWtsaW5nZW4gZm9yIE9kZGEgc3Blc2lmaWt0IGkgMjAyMC4gSWdqZW4gc8OlIHNlciB2aSBvZ3PDpSBzYW1tZSBla3N0cmVtZSB2ZWtzdCBpIFVsbGVuc3ZhbmcgaSAyMDIwIHNvbSBrb21tZXIgYXYgc2FtbWVuc2zDpWluZ2VuLgoKT2RkYSBlciBramVudCBsb2thbHQgZm9yIHNpbiBhbGRyZW5kZSBiZWZvbGtuaW5nLCBzb20gbWVzdCBzYW5uc3luZWxpZyBlciBlbiB2aWt0aWcgZmFrdG9yIGZvciBodm9yZm9yIE9kZGEgaGFyIHNldHQgc8OlIGtyYWZ0aWcgcmVkdWtzam9uIGkgc3lzc2Vsc2V0dGluZyBldHRlciBib3N0ZWQsIHNhbXRpZGlnIHNvbSBrb21tdW5lbiBoYXIgc2V0dCBlbiB2ZWtzdCBpIGhlbHNldGplbmVzdGVyLgoKIyAzLjEgTG9rYWxpc2VyaW5nc2t2b3RpZW50ZXIgKERldHRlIGVyID5FR0VOVExJRzwgT3BwZ8OldmUgMiBzb20gYmxpciBnam9ydCBoZXIuIERlbm5lIG9nIEdpbmkvUkRJIGZvciBvcHBnw6V2ZSAyIGLDuHIgYmxpIGJ5dHRhc3Qgb20pCgpgYGB7cn0KbGlicmFyeShyZWFkeGwpCm5hc2pvbmFsdF9hcmJlaWRzc3RlZCA8LSByZWFkX2V4Y2VsKCJEYXRhL25hc2pvbmFsdF9hcmJlaWRzc3RlZC54bHN4IikKYGBgCgojIyBMb2thbGlzZXJpbmdza3ZvdGllbnRlciBmb3IgcmVnaW9uZW5lIHNhbWxldAoKTsOlIGhhciB2aSBpbGx1c3RlcnQgb2cgc2V0dCBww6UgZ3JhZmVuZSBmb3IgdXR2aWtsaW5nZW4gaSBkZSB0cmUgcmVnaW9uZW5lLCBtZWQgaGVuc3luIHDDpSBzeXNzZWxzZXR0aW5nIGV0dGVyIGFyYmVpZHNzdGVkLiBWaWRlcmUgaSByYXBwb3J0ZW4gc2thbCB2aSBuw6Ugc2UgcMOlIEdpbmkta29lZmZpc2llbnRlbmUgb2cgZGVuIHJlZ2lvbmVsbGUgZGl2ZXJzaWZpc2VyaW5ncyBpbmRla3NlbiAoUkRJKSBmb3Igw6UgdnVyZGVyZSBodm9yIHNwcmVkdCBlbGxlciBrb25zZW50cmVydCwgc2FtdCBzcGVzaWFsaXNlcnQgdXR2bGFndCBuw6ZyaW5nZXIgZXIgaSB1dHZhbGd0ZSBrb21tdW5lciBpIHJlZ2lvbmVuZS4KCiMjIyBIYXVnYWxhbmRldCAyMDA4LTIwMjAKCkbDuHJzdGUgdmkgc2VyIHDDpSBlciBIYXVnYWxhbmRldC4KCmBgYHtyIGhsZF9hcmJfRWlyX0VyfQpobGRfYXJiX0xRIDwtIGhsZF9hcmIgJT4lIAogIG11dGF0ZShFaXJfRXJfSm9yZGJydWsgPSBgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfSW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfRWxfVmFubl9SZW5vID0gYEVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfQnlnZ19vZ19BbmxlZ2cgPSBgQnlnZ2UtIG9nIEFubmxlZ2dzdmlya3NvbWhldGAvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0ZpbmFucyA9IGBGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZ2AvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX1VuZGVydmlzbmluZyA9IFVuZGVydmlzbmluZy9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfSGVsc2UgPSBgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgCiAgICAgICAgIEVpbl9Fbl9Kb3JkYnJ1ayA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKCiAgICAgICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaS9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKCiAgICAgICAgIEVpbl9Fbl9FbF9WYW5uX1Jlbm8gPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgCiAgICAgICAgIEVpbl9Fbl9CeWdnX29nX0FubGVnZyA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0YC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgCiAgICAgICAgIEVpbl9Fbl9GaW5hbnMgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgCiAgICAgICAgIEVpbl9Fbl9VbmRlcnZpc25pbmcgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkVW5kZXJ2aXNuaW5nL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICAKICAgICAgICAgRWluX0VuX0hlbHNlID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgCiAgICAgICAgIExRX1ByaW3DpnIgPSBFaXJfRXJfSm9yZGJydWsvRWluX0VuX0pvcmRicnVrLAogICAgICAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaS9FaW5fRW5fSW5kdXN0cmksCiAgICAgICAgIExRX0VsX1Zhbm5fUmVubyA9IEVpcl9Fcl9FbF9WYW5uX1Jlbm8vRWluX0VuX0VsX1Zhbm5fUmVubywKICAgICAgICAgTFFfQnlnZ19vZ19BbmxlZ2cgPSBFaXJfRXJfQnlnZ19vZ19BbmxlZ2cvRWluX0VuX0J5Z2dfb2dfQW5sZWdnLAogICAgICAgICBMUV9GaW5hbnMgPSBFaXJfRXJfRmluYW5zL0Vpbl9Fbl9GaW5hbnMsCiAgICAgICAgIExRX1VuZGVydmlzbmluZyA9IEVpcl9Fcl9VbmRlcnZpc25pbmcvRWluX0VuX1VuZGVydmlzbmluZywKICAgICAgICAgTFFfSGVsc2UgPSBFaXJfRXJfSGVsc2UvRWluX0VuX0hlbHNlCikgJT4lIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9FbF9WYW5uX1Jlbm8sIExRX0J5Z2dfb2dfQW5sZWdnLCBMUV9GaW5hbnMsIExRX1VuZGVydmlzbmluZywgTFFfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZShobGRfYXJiX0xRLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSm9yZGJydWsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiVmFubiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJCeWdnIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbmFucyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbmRlcnYuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JQogIGFkZF9oZWFkZXJfYWJvdmUoYygiTG9rYWxrdm90aWVudCwgcmVnaW9uOiBIYXVnYWxhbmRldCI9OSkpCmBgYAoKVmkKCmBgYHtyfQpobGRfYXJiX0dJTkkgPC0gaGxkX2FyYiAlPiUgCiAgbXV0YXRlKAogICAgR0lOSV9Qcmltw6ZyID0gKChobGRfYXJiJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAtIGhsZF9hcmIkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKGhsZF9hcmIkSW5kdXN0cmkvbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC0gaGxkX2FyYiRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9IZWxzZSA9ICgoaGxkX2FyYiRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIGhsZF9hcmIkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMikpCmBgYAoKYGBge3J9CmhsZF9hcmJfR0lOSSA8LSBobGRfYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIFJESV9Qcmltw6ZyID0gMSAvIGFicyhobGRfYXJiJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gaGxkX2FyYiRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9JbmR1c3RyaSA9IDEgLyBhYnMoaGxkX2FyYiRJbmR1c3RyaSAvIGhsZF9hcmIkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKGhsZF9hcmIkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2hsZF9hcmIkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCkpICU+JSAKICAKICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTYpCmBgYAoKYGBge3J9CmthYmxlKGhsZF9hcmJfR0lOSSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JQogIGFkZF9oZWFkZXJfYWJvdmUoYygiSGF1Z2FsYW5kZXQiPTgpKQpgYGAKCiMjIyMgS29tbXVuZW5pdsOlIHDDpSBIYXVnYWxhbmRldCAoSGF1Z2VzdW5kLCBLYXJtw7h5LCBUeXN2w6ZyIG9nIEJva24pCgojIyMjIyBIYXVnZXN1bmQKCmBgYHtyfQpIYXVnX2FyYl9HSU5JIDwtIHN5c3NlbF9hcmIgJT4lIAogIGZpbHRlcihrbnIgJWluJSAiMTEwNiIpCmBgYAoKYGBge3J9CkhhdWdfYXJiX0dJTkkgPC0gSGF1Z19hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgRWlyX0VyX1ByaW3DpnIgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgCiAgICBFaW5fRW5fUHJpbcOmciA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgRWluX0VuX0luZHVzdHJpID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgCiAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgCiAgICBMUV9Qcmltw6ZyID0gRWlyX0VyX1ByaW3DpnIgLyBFaW5fRW5fUHJpbcOmciwKICAgIExRX0luZHVzdHJpID0gRWlyX0VyX0luZHVzdHJpIC8gRWluX0VuX0luZHVzdHJpLAogICAgTFFfSGVsc2UgPSBFaXJfRXJfSGVsc2UgLyBFaW5fRW5fSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz00KQpgYGAKCmBgYHtyfQpuYW1lcyhIYXVnX2FyYl9HSU5JKVtbNV1dIDwtICLDhXIiCmBgYAoKYGBge3J9CkhhdWdfYXJiX0dJTkkgPC0gSGF1Z19hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgR0lOSV9Qcmltw6ZyID0gKChIYXVnX2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAtIEhhdWdfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKEhhdWdfYXJiX0dJTkkkSW5kdXN0cmkvbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC0gSGF1Z19hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9IZWxzZSA9ICgoSGF1Z19hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIEhhdWdfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMikpCmBgYAoKYGBge3J9CkhhdWdfYXJiX0dJTkkgPC0gSGF1Z19hcmJfR0lOSSAlPiUKICBtdXRhdGUoCiAgICBSRElfUHJpbcOmciA9IDEgLyBhYnMoSGF1Z19hcmJfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYCAvIEhhdWdfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSW5kdXN0cmkgPSAxIC8gYWJzKEhhdWdfYXJiX0dJTkkkSW5kdXN0cmkgLyBIYXVnX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAvIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0hlbHNlID0gMSAvIGFicyhIYXVnX2FyYl9HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9IYXVnX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApKSAlPiUgCiAgCiAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZSgKICBIYXVnX2FyYl9HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiR0lOSSIgPSAzLCAiUkRJIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJIYXVnZXN1bmQ6IEdpbmkgJiBSREkiPTgpKQoKa2FibGUoCiAgSGF1Z19hcmJfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJFaXIvRXIiID0gMywgIkVpbi9FbiIgPSAzLCAiTFEiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkhhdWdlc3VuZDogTG9rYWxrdm90aWVudCI9MTEpKQpgYGAKCiMjIyMjIEJva24KCmBgYHtyfQpCb2tuX2FyYl9HSU5JIDwtIHN5c3NlbF9hcmIgJT4lIAogIGZpbHRlcihrbnIgJWluJSAiMTE0NSIpCmBgYAoKYGBge3J9CkJva25fYXJiX0dJTkkgPC0gQm9rbl9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgRWlyX0VyX1ByaW3DpnIgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgCiAgICBFaW5fRW5fUHJpbcOmciA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgRWluX0VuX0luZHVzdHJpID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgCiAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgCiAgICBMUV9Qcmltw6ZyID0gRWlyX0VyX1ByaW3DpnIgLyBFaW5fRW5fUHJpbcOmciwKICAgIExRX0luZHVzdHJpID0gRWlyX0VyX0luZHVzdHJpIC8gRWluX0VuX0luZHVzdHJpLAogICAgTFFfSGVsc2UgPSBFaXJfRXJfSGVsc2UgLyBFaW5fRW5fSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz00KQpgYGAKCmBgYHtyfQpuYW1lcyhCb2tuX2FyYl9HSU5JKVtbNV1dIDwtICLDhXIiCmBgYAoKYGBge3J9CkJva25fYXJiX0dJTkkgPC0gQm9rbl9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgR0lOSV9Qcmltw6ZyID0gKChCb2tuX2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAtIEJva25fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKEJva25fYXJiX0dJTkkkSW5kdXN0cmkvbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC0gQm9rbl9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9IZWxzZSA9ICgoQm9rbl9hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIEJva25fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMikpCmBgYAoKYGBge3J9CkJva25fYXJiX0dJTkkgPC0gQm9rbl9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKEJva25fYXJiX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAgLyBCb2tuX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAvIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhCb2tuX2FyYl9HSU5JJEluZHVzdHJpIC8gQm9rbl9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkSW5kdXN0cmkgLyBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9IZWxzZSA9IDEgLyBhYnMoQm9rbl9hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvQm9rbl9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoCiAgQm9rbl9hcmJfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkdJTkkiID0gMywgIlJESSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiQm9rbjogR2luaSAmIFJESSI9OCkpCgprYWJsZSgKICBCb2tuX2FyYl9HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkVpci9FciIgPSAzLCAiRWluL0VuIiA9IDMsICJMUSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiQm9rbjogTG9rYWxrdm90aWVudCI9MTEpKQpgYGAKCiMjIyMjIFR5c3bDpnIKCmBgYHtyfQpUeXN2X2FyYl9HSU5JIDwtIHN5c3NlbF9hcmIgJT4lIAogIGZpbHRlcihrbnIgJWluJSAiMTE0NiIpCmBgYAoKYGBge3J9ClR5c3ZfYXJiX0dJTkkgPC0gVHlzdl9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgRWlyX0VyX1ByaW3DpnIgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgCiAgICBFaW5fRW5fUHJpbcOmciA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgRWluX0VuX0luZHVzdHJpID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgCiAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgCiAgICBMUV9Qcmltw6ZyID0gRWlyX0VyX1ByaW3DpnIgLyBFaW5fRW5fUHJpbcOmciwKICAgIExRX0luZHVzdHJpID0gRWlyX0VyX0luZHVzdHJpIC8gRWluX0VuX0luZHVzdHJpLAogICAgTFFfSGVsc2UgPSBFaXJfRXJfSGVsc2UgLyBFaW5fRW5fSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz00KQpgYGAKCmBgYHtyfQpuYW1lcyhUeXN2X2FyYl9HSU5JKVtbNV1dIDwtICLDhXIiCmBgYAoKYGBge3J9ClR5c3ZfYXJiX0dJTkkgPC0gVHlzdl9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgR0lOSV9Qcmltw6ZyID0gKChUeXN2X2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAtIFR5c3ZfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKFR5c3ZfYXJiX0dJTkkkSW5kdXN0cmkvbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC0gVHlzdl9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9IZWxzZSA9ICgoVHlzdl9hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIFR5c3ZfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMikpCmBgYAoKYGBge3J9ClR5c3ZfYXJiX0dJTkkgPC0gVHlzdl9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKFR5c3ZfYXJiX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAgLyBUeXN2X2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAvIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhUeXN2X2FyYl9HSU5JJEluZHVzdHJpIC8gVHlzdl9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkSW5kdXN0cmkgLyBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9IZWxzZSA9IDEgLyBhYnMoVHlzdl9hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvVHlzdl9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoCiAgVHlzdl9hcmJfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkdJTkkiID0gMywgIlJESSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiVHlzdsOmcjogR2luaSAmIFJESSI9OCkpCgprYWJsZSgKICBUeXN2X2FyYl9HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkVpci9FciIgPSAzLCAiRWluL0VuIiA9IDMsICJMUSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiVHlzdsOmcjoiPTExKSkKYGBgCgojIyMjIyBLYXJtw7h5CgpgYGB7cn0KS2FybV9hcmJfR0lOSSA8LSBzeXNzZWxfYXJiICU+JSAKICBmaWx0ZXIoa25yICVpbiUgIjExNDkiKQpgYGAKCmBgYHtyfQpLYXJtX2FyYl9HSU5JIDwtIEthcm1fYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEVpcl9Fcl9Qcmltw6ZyID0gYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9JbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSGVsc2UgPSBgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAKICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaS9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgRWluX0VuX0hlbHNlID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoS2FybV9hcmJfR0lOSSlbWzVdXSA8LSAiw4VyIgpgYGAKCmBgYHtyfQpLYXJtX2FyYl9HSU5JIDwtIEthcm1fYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoS2FybV9hcmJfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLSBLYXJtX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0luZHVzdHJpID0gKChLYXJtX2FyYl9HSU5JJEluZHVzdHJpL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAtIEthcm1fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSGVsc2UgPSAoKEthcm1fYXJiX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAgLSBLYXJtX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpLYXJtX2FyYl9HSU5JIDwtIEthcm1fYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIFJESV9Qcmltw6ZyID0gMSAvIGFicyhLYXJtX2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gS2FybV9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9JbmR1c3RyaSA9IDEgLyBhYnMoS2FybV9hcmJfR0lOSSRJbmR1c3RyaSAvIEthcm1fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKEthcm1fYXJiX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL0thcm1fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCkpICU+JSAKICAKICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTYpCmBgYAoKYGBge3J9CmthYmxlKAogIEthcm1fYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkthcm3DuHk6IEdpbmkgJiBSREkiPTgpKQoKa2FibGUoCiAgS2FybV9hcmJfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJFaXIvRXIiID0gMywgIkVpbi9FbiIgPSAzLCAiTFEiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkthcm3DuHk6IExva2Fsa3ZvdGllbnQiPTExKSkKYGBgCgojIyMgU3VubmhvcmRsYW5kIDIwMDgtMjAyMAoKLSAgIEVpcl9Fcl9Kb3JkYnJ1ayA9IFNhbWxldCBzeXNzZWxzZXR0aW5nIGkgcmVnaW9uIFN1bm5ob3JkbGFuZAotICAgRWlyX0VyX0luZHVzdHJpID0gU2FtbGV0IHN5c3NlbHNldHRpbmcgaW5uZW4gSW5kdXN0cmktc2VrdG9yZW4gaSByZWdpb24gU3VubmhvcmRsYW5kCi0gICBFaXJfRXJfRWxfVmFubl9SZW5vID0gU2FtbGV0IHN5c3NlbHNldHRpbmcgaW5uZW4gRWxla2V0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uLXNla3RvcmVuIGkgcmVnaW9uIFN1bm5ob3JkbGFuZAotICAgRWlyX0VyX0J5Z2dfb2dfQW5sZWdnID0gU2FtbGV0IHN5c3NlbHNldHRpbmcgaW5uZW4gQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0LXNla3RvcmVuIGkgcmVnaW9uIFN1bm5ob3JkbGFuZAotICAgRWlyX0VyX0ZpbmFucyA9IFNhbWxldCBzeXNzZWxzZXR0aW5nIGlubmVuIEZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nLXNla3RvcmVuIGkgcmVnaW9uIFN1bm5ob3JkbGFuZAotICAgRWlyX0VyX1VuZGVydmlzbmluZyA9IFNhbWxldCBzeXNzZWxzZXR0aW5nIGlubmVuIFVuZGVydmlzbmluZy1zZWt0b3JlbiBpIHJlZ2lvbiBTdW5uaG9yZGxhbmQKLSAgIEVpcl9Fcl9IZWxzZSA9IFNhbWxldCBzeXNzZWxzZXR0aW5nIGlubmVuIEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXItc2VrdG9yZW4gaSByZWdpb24gU3VubmhvcmRsYW5kCgpgYGB7ciBzdW5faW5kdXN0cml9CnN1bl9hcmJfTFEgPC0gc3VuX2FyYiAlPiUgCiAgIyBTbGlrIGZpbm5lciB2aSBzYW1sZXQgc3lzc2Vsc2V0dGluZyBpIEluZHVzdHJpIGkgU3VubmhvcmRsYW5kIGZvciDDpXIgMjAwOC0yMDIwCiAgbXV0YXRlKEVpcl9Fcl9Kb3JkYnJ1ayA9IGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9JbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9FbF9WYW5uX1Jlbm8gPSBgRWxla3RyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb25gL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9CeWdnX29nX0FubGVnZyA9IGBCeWdnZS0gb2cgQW5ubGVnZ3N2aXJrc29taGV0YC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfRmluYW5zID0gYEZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfVW5kZXJ2aXNuaW5nID0gVW5kZXJ2aXNuaW5nL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICAKICAgICAgICAgRWluX0VuX0pvcmRicnVrID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAoKICAgICAgICAgRWluX0VuX0luZHVzdHJpID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAoKICAgICAgICAgRWluX0VuX0VsX1Zhbm5fUmVubyA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgRWxla3RyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb25gL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICAKICAgICAgICAgRWluX0VuX0J5Z2dfb2dfQW5sZWdnID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXRgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICAKICAgICAgICAgRWluX0VuX0ZpbmFucyA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmdgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICAKICAgICAgICAgRWluX0VuX1VuZGVydmlzbmluZyA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRVbmRlcnZpc25pbmcvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIAogICAgICAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICAKICAgICAgICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Kb3JkYnJ1ay9FaW5fRW5fSm9yZGJydWssCiAgICAgICAgIExRX0luZHVzdHJpID0gRWlyX0VyX0luZHVzdHJpL0Vpbl9Fbl9JbmR1c3RyaSwKICAgICAgICAgTFFfRWxfVmFubl9SZW5vID0gRWlyX0VyX0VsX1Zhbm5fUmVuby9FaW5fRW5fRWxfVmFubl9SZW5vLAogICAgICAgICBMUV9CeWdnX29nX0FubGVnZyA9IEVpcl9Fcl9CeWdnX29nX0FubGVnZy9FaW5fRW5fQnlnZ19vZ19BbmxlZ2csCiAgICAgICAgIExRX0ZpbmFucyA9IEVpcl9Fcl9GaW5hbnMvRWluX0VuX0ZpbmFucywKICAgICAgICAgTFFfVW5kZXJ2aXNuaW5nID0gRWlyX0VyX1VuZGVydmlzbmluZy9FaW5fRW5fVW5kZXJ2aXNuaW5nLAogICAgICAgICBMUV9IZWxzZSA9IEVpcl9Fcl9IZWxzZS9FaW5fRW5fSGVsc2UKKSAlPiUgCiAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0VsX1Zhbm5fUmVubywgTFFfQnlnZ19vZ19BbmxlZ2csIExRX0ZpbmFucywgTFFfVW5kZXJ2aXNuaW5nLCBMUV9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTYpCmBgYAoKYGBge3J9CmthYmxlKHN1bl9hcmJfTFEsCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJKb3JkYnJ1ayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJWYW5uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJ5Z2ciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiRmluYW5zIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVuZGVydi4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJMb2thbGt2b3RpZW50ZW4sIHJlZ2lvbjogU3VubmhvcmRsYW5kIj05KSkKYGBgCgpgYGB7cn0Kc3VuX2FyYl9HSU5JIDwtIHN1bl9hcmIgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoc3VuX2FyYiRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLSBzdW5fYXJiJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0luZHVzdHJpID0gKChzdW5fYXJiJEluZHVzdHJpL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAtIHN1bl9hcmIkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSGVsc2UgPSAoKHN1bl9hcmIkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAgLSBzdW5fYXJiJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpzdW5fYXJiX0dJTkkgPC0gc3VuX2FyYl9HSU5JICU+JSAKICBtdXRhdGUoCiAgICBSRElfUHJpbcOmciA9IDEgLyBhYnMoc3VuX2FyYiRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAvIHN1bl9hcmIkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhzdW5fYXJiJEluZHVzdHJpIC8gc3VuX2FyYiRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkSW5kdXN0cmkgLyBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKHN1bl9hcmIkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL3N1bl9hcmIkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCkpICU+JSAKICAKICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTYpCmBgYAoKYGBge3J9CmthYmxlKHN1bl9hcmJfR0lOSSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIlJlZ2lvbjogU3VubmhvcmRsYW5kIj04KSkKYGBgCgojIyMjIEtvbW11bmVuaXbDpSBpIFN1bm5ob3JkbGFuZCAoU3RvcmQsIEt2aW5uaGVyYWQsIELDuG1sbyBvZyBTdmVpbykKCiMjIyMjIFN0b3JkCgpgYGB7cn0KU3RvcmRfYXJiX0dJTkkgPC0gc3lzc2VsX2FyYiAlPiUgCiAgZmlsdGVyKGtuciAlaW4lICI0NjE0IikKYGBgCgpgYGB7cn0KU3RvcmRfYXJiX0dJTkkgPC0gU3RvcmRfYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEVpcl9Fcl9Qcmltw6ZyID0gYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9JbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSGVsc2UgPSBgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAKICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaS9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgRWluX0VuX0hlbHNlID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoU3RvcmRfYXJiX0dJTkkpW1s1XV0gPC0gIsOFciIKYGBgCgpgYGB7cn0KU3RvcmRfYXJiX0dJTkkgPC0gU3RvcmRfYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoU3RvcmRfYXJiX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gU3RvcmRfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKFN0b3JkX2FyYl9HSU5JJEluZHVzdHJpL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAtIFN0b3JkX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChTdG9yZF9hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIFN0b3JkX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpTdG9yZF9hcmJfR0lOSSA8LSBTdG9yZF9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKFN0b3JkX2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gU3RvcmRfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSW5kdXN0cmkgPSAxIC8gYWJzKFN0b3JkX2FyYl9HSU5JJEluZHVzdHJpIC8gU3RvcmRfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKFN0b3JkX2FyYl9HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9TdG9yZF9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoCiAgU3RvcmRfYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIlN0b3JkOiBHaW5pICYgUkRJIj04KSkKCmthYmxlKAogIFN0b3JkX2FyYl9HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkVpci9FciIgPSAzLCAiRWluL0VuIiA9IDMsICJMUSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiU3RvcmQ6IExva2Fsa3ZvdGllbnQiPTExKSkKYGBgCgojIyMjIyBLdmlubmhlcmFkCgpgYGB7cn0KS3Zpbm5fYXJiX0dJTkkgPC0gc3lzc2VsX2FyYiAlPiUgCiAgZmlsdGVyKGtuciAlaW4lICI0NjE3IikKYGBgCgpgYGB7cn0KS3Zpbm5fYXJiX0dJTkkgPC0gS3Zpbm5fYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEVpcl9Fcl9Qcmltw6ZyID0gYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9JbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSGVsc2UgPSBgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAKICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaS9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgRWluX0VuX0hlbHNlID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoS3Zpbm5fYXJiX0dJTkkpW1s1XV0gPC0gIsOFciIKYGBgCgpgYGB7cn0KS3Zpbm5fYXJiX0dJTkkgPC0gS3Zpbm5fYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoS3Zpbm5fYXJiX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gS3Zpbm5fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKEt2aW5uX2FyYl9HSU5JJEluZHVzdHJpL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAtIEt2aW5uX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChLdmlubl9hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIEt2aW5uX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpLdmlubl9hcmJfR0lOSSA8LSBLdmlubl9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKEt2aW5uX2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gS3Zpbm5fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSW5kdXN0cmkgPSAxIC8gYWJzKEt2aW5uX2FyYl9HSU5JJEluZHVzdHJpIC8gS3Zpbm5fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKEt2aW5uX2FyYl9HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9Ldmlubl9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoCiAgS3Zpbm5fYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkt2aW5uaGVyYWQ6IEdpbmkgJiBSREkiPTgpKQoKa2FibGUoCiAgS3Zpbm5fYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiRWlyL0VyIiA9IDMsICJFaW4vRW4iID0gMywgIkxRIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJLdmlubmhlcmFkOiBMb2thbGt2b3RpZW50Ij0xMSkpCmBgYAoKIyMjIyMgQsO4bWxvCgpgYGB7cn0KQsO4bWxvX2FyYl9HSU5JIDwtIHN5c3NlbF9hcmIgJT4lIAogIGZpbHRlcihrbnIgJWluJSAiNDYxMyIpCmBgYAoKYGBge3J9CkLDuG1sb19hcmJfR0lOSSA8LSBCw7htbG9fYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEVpcl9Fcl9Qcmltw6ZyID0gYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9JbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSGVsc2UgPSBgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAKICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaS9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgRWluX0VuX0hlbHNlID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoQsO4bWxvX2FyYl9HSU5JKVtbNV1dIDwtICLDhXIiCmBgYAoKYGBge3J9CkLDuG1sb19hcmJfR0lOSSA8LSBCw7htbG9fYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoQsO4bWxvX2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAtIELDuG1sb19hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9JbmR1c3RyaSA9ICgoQsO4bWxvX2FyYl9HSU5JJEluZHVzdHJpL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAtIELDuG1sb19hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9IZWxzZSA9ICgoQsO4bWxvX2FyYl9HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgIC0gQsO4bWxvX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpCw7htbG9fYXJiX0dJTkkgPC0gQsO4bWxvX2FyYl9HSU5JICU+JSAKICBtdXRhdGUoCiAgICBSRElfUHJpbcOmciA9IDEgLyBhYnMoQsO4bWxvX2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gQsO4bWxvX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAvIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhCw7htbG9fYXJiX0dJTkkkSW5kdXN0cmkgLyBCw7htbG9fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKELDuG1sb19hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvQsO4bWxvX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApKSAlPiUgCiAgCiAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZSgKICBCw7htbG9fYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkLDuG1sbzogR2luaSAmIFJESSI9OCkpCgprYWJsZSgKICBCw7htbG9fYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiRWlyL0VyIiA9IDMsICJFaW4vRW4iID0gMywgIkxRIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJCw7htbG86IExva2Fsa3ZvdGllbnQiPTExKSkKYGBgCgojIyMjIyBTdmVpbwoKYGBge3J9ClN2ZWlvX2FyYl9HSU5JIDwtIHN5c3NlbF9hcmIgJT4lIAogIGZpbHRlcihrbnIgJWluJSAiNDYxMiIpCmBgYAoKYGBge3J9ClN2ZWlvX2FyYl9HSU5JIDwtIFN2ZWlvX2FyYl9HSU5JICU+JSAKICBtdXRhdGUoCiAgICBFaXJfRXJfUHJpbcOmciA9IGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAKICAgIEVpbl9Fbl9Qcmltw6ZyID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgCiAgICBFaW5fRW5fSW5kdXN0cmkgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkSW5kdXN0cmkvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAKICAgIEVpbl9Fbl9IZWxzZSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAKICAgIExRX1ByaW3DpnIgPSBFaXJfRXJfUHJpbcOmciAvIEVpbl9Fbl9Qcmltw6ZyLAogICAgTFFfSW5kdXN0cmkgPSBFaXJfRXJfSW5kdXN0cmkgLyBFaW5fRW5fSW5kdXN0cmksCiAgICBMUV9IZWxzZSA9IEVpcl9Fcl9IZWxzZSAvIEVpbl9Fbl9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTQpCmBgYAoKYGBge3J9Cm5hbWVzKFN2ZWlvX2FyYl9HSU5JKVtbNV1dIDwtICLDhXIiCmBgYAoKYGBge3J9ClN2ZWlvX2FyYl9HSU5JIDwtIFN2ZWlvX2FyYl9HSU5JICU+JSAKICBtdXRhdGUoCiAgICBHSU5JX1ByaW3DpnIgPSAoKFN2ZWlvX2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAtIFN2ZWlvX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0luZHVzdHJpID0gKChTdmVpb19hcmJfR0lOSSRJbmR1c3RyaS9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkSW5kdXN0cmkgLSBTdmVpb19hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9IZWxzZSA9ICgoU3ZlaW9fYXJiX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAgLSBTdmVpb19hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSkKYGBgCgpgYGB7cn0KU3ZlaW9fYXJiX0dJTkkgPC0gU3ZlaW9fYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIFJESV9Qcmltw6ZyID0gMSAvIGFicyhTdmVpb19hcmJfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYCAvIFN2ZWlvX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAvIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhTdmVpb19hcmJfR0lOSSRJbmR1c3RyaSAvIFN2ZWlvX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAvIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0hlbHNlID0gMSAvIGFicyhTdmVpb19hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvU3ZlaW9fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCkpICU+JSAKICAKICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTYpCmBgYAoKYGBge3J9CmthYmxlKAogIFN2ZWlvX2FyYl9HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiR0lOSSIgPSAzLCAiUkRJIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJTdmVpbzogR2luaSAmIFJESSI9OCkpCgprYWJsZSgKICBTdmVpb19hcmJfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJFaXIvRXIiID0gMywgIkVpbi9FbiIgPSAzLCAiTFEiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIlN2ZWlvOiBMb2thbGt2b3RpZW50Ij0xMSkpCmBgYAoKIyMjIEhhcmRhbmdlciAyMDA4LTIwMjAKCi0gICBFaXJfRXJfSm9yZGJydWsgPSBTYW1sZXQgc3lzc2Vsc2V0dGluZyBpIHJlZ2lvbiBIYXJkYW5nZXIKLSAgIEVpcl9Fcl9JbmR1c3RyaSA9IFNhbWxldCBzeXNzZWxzZXR0aW5nIGlubmVuIEluZHVzdHJpLXNla3RvcmVuIGkgcmVnaW9uIEhhcmRhbmdlcgotICAgRWlyX0VyX0VsX1Zhbm5fUmVubyA9IFNhbWxldCBzeXNzZWxzZXR0aW5nIGlubmVuIEVsZWtldHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbi1zZWt0b3JlbiBpIHJlZ2lvbiBIYXJkYW5nZXIKLSAgIEVpcl9Fcl9CeWdnX29nX0FubGVnZyA9IFNhbWxldCBzeXNzZWxzZXR0aW5nIGlubmVuIEJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldC1zZWt0b3JlbiBpIHJlZ2lvbiBIYXJkYW5nZXIKLSAgIEVpcl9Fcl9GaW5hbnMgPSBTYW1sZXQgc3lzc2Vsc2V0dGluZyBpbm5lbiBGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZy1zZWt0b3JlbiBpIHJlZ2lvbiBIYXJkYW5nZXIKLSAgIEVpcl9Fcl9VbmRlcnZpc25pbmcgPSBTYW1sZXQgc3lzc2Vsc2V0dGluZyBpbm5lbiBVbmRlcnZpc25pbmctc2VrdG9yZW4gaSByZWdpb24gSGFyZGFuZ2VyCi0gICBFaXJfRXJfSGVsc2UgPSBTYW1sZXQgc3lzc2Vsc2V0dGluZyBpbm5lbiBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyLXNla3RvcmVuIGkgcmVnaW9uIEhhcmRhbmdlcgoKYGBge3IgaGFyX2luZHVzdHJpfQpoYXJfYXJiX0xRIDwtIGhhcl9hcmIgJT4lIAogICMgU2xpayBmaW5uZXIgdmkgc2FtbGV0IHN5c3NlbHNldHRpbmcgaSBJbmR1c3RyaSBpIEhhcmRhbmdlciBmb3Igw6VyIDIwMDgtMjAyMAogIG11dGF0ZShFaXJfRXJfSm9yZGJydWsgPSBgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfSW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfRWxfVmFubl9SZW5vID0gYEVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfQnlnZ19vZ19BbmxlZ2cgPSBgQnlnZ2UtIG9nIEFubmxlZ2dzdmlya3NvbWhldGAvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0ZpbmFucyA9IGBGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZ2AvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX1VuZGVydmlzbmluZyA9IFVuZGVydmlzbmluZy9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfSGVsc2UgPSBgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgCiAgICAgICAgIEVpbl9Fbl9Kb3JkYnJ1ayA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKCiAgICAgICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaS9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKCiAgICAgICAgIEVpbl9Fbl9FbF9WYW5uX1Jlbm8gPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgCiAgICAgICAgIEVpbl9Fbl9CeWdnX29nX0FubGVnZyA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0YC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgCiAgICAgICAgIEVpbl9Fbl9GaW5hbnMgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgCiAgICAgICAgIEVpbl9Fbl9VbmRlcnZpc25pbmcgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkVW5kZXJ2aXNuaW5nL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICAKICAgICAgICAgRWluX0VuX0hlbHNlID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgCiAgICAgICAgIExRX1ByaW3DpnIgPSBFaXJfRXJfSm9yZGJydWsvRWluX0VuX0pvcmRicnVrLAogICAgICAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaS9FaW5fRW5fSW5kdXN0cmksCiAgICAgICAgIExRX0VsX1Zhbm5fUmVubyA9IEVpcl9Fcl9FbF9WYW5uX1Jlbm8vRWluX0VuX0VsX1Zhbm5fUmVubywKICAgICAgICAgTFFfQnlnZ19vZ19BbmxlZ2cgPSBFaXJfRXJfQnlnZ19vZ19BbmxlZ2cvRWluX0VuX0J5Z2dfb2dfQW5sZWdnLAogICAgICAgICBMUV9GaW5hbnMgPSBFaXJfRXJfRmluYW5zL0Vpbl9Fbl9GaW5hbnMsCiAgICAgICAgIExRX1VuZGVydmlzbmluZyA9IEVpcl9Fcl9VbmRlcnZpc25pbmcvRWluX0VuX1VuZGVydmlzbmluZywKICAgICAgICAgTFFfSGVsc2UgPSBFaXJfRXJfSGVsc2UvRWluX0VuX0hlbHNlCikgJT4lIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9FbF9WYW5uX1Jlbm8sIExRX0J5Z2dfb2dfQW5sZWdnLCBMUV9GaW5hbnMsIExRX1VuZGVydmlzbmluZywgTFFfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZShoYXJfYXJiX0xRLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSm9yZGJydWsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiVmFubiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJCeWdnIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbmFucyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbmRlcnYuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JQogIGFkZF9oZWFkZXJfYWJvdmUoYygiTG9rYWxrdm90aWVudCwgcmVnaW9uOiBIYXJkYW5nZXIiPTkpKQpgYGAKCmBgYHtyfQpoYXJfYXJiX0dJTkkgPC0gaGFyX2FyYiAlPiUgCiAgbXV0YXRlKAogICAgR0lOSV9Qcmltw6ZyID0gKChoYXJfYXJiJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAtIGhhcl9hcmIkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKGhhcl9hcmIkSW5kdXN0cmkvbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC0gaGFyX2FyYiRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9IZWxzZSA9ICgoaGFyX2FyYiRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIGhhcl9hcmIkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMikpCmBgYAoKYGBge3J9Cmhhcl9hcmJfR0lOSSA8LSBoYXJfYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIFJESV9Qcmltw6ZyID0gMSAvIGFicyhoYXJfYXJiJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gaGFyX2FyYiRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgCiAgICBSRElfSW5kdXN0cmkgPSAxIC8gYWJzKGhhcl9hcmIkSW5kdXN0cmkgLyBoYXJfYXJiJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAvIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAKICAgIFJESV9IZWxzZSA9IDEgLyBhYnMoaGFyX2FyYiRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvaGFyX2FyYiRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgICU+JQogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoaGFyX2FyYl9HSU5JLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JQogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkdJTkkiID0gMywgIlJESSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiUmVnaW9uOiBIYXJkYW5nZXIiPTgpKQpgYGAKCiMjIyMgS29tbXVuZW5pdsOlIGkgSGFyZGFuZ2VyIChPZGRhIG9nIFVsbGVuc3ZhbmcpCgojIyMjIyBPZGRhCgpgYGB7cn0KbmFzam9fYXJiX3JlZCA8LSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQgJT4lIAogIGZpbHRlcihhYXIgJWluJSBjKDIwMDg6MjAxOSkpCmBgYAoKYGBge3J9Ck9kZGFfYXJiX0dJTkkgPC0gc3lzc2VsX2FyYiAlPiUgCiAgZmlsdGVyKGtuciAlaW4lICIxMjI4IikKYGBgCgpgYGB7cn0KT2RkYV9hcmJfR0lOSSA8LSBPZGRhX2FyYl9HSU5JICU+JSAKICBtdXRhdGUoCiAgICBFaXJfRXJfUHJpbcOmciA9IGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAKICAgIEVpbl9Fbl9Qcmltw6ZyID0gbmFzam9fYXJiX3JlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9uYXNqb19hcmJfcmVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAKICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvX2FyYl9yZWQkSW5kdXN0cmkvbmFzam9fYXJiX3JlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgCiAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb19hcmJfcmVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb19hcmJfcmVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAKICAgIExRX1ByaW3DpnIgPSBFaXJfRXJfUHJpbcOmciAvIEVpbl9Fbl9Qcmltw6ZyLAogICAgTFFfSW5kdXN0cmkgPSBFaXJfRXJfSW5kdXN0cmkgLyBFaW5fRW5fSW5kdXN0cmksCiAgICBMUV9IZWxzZSA9IEVpcl9Fcl9IZWxzZSAvIEVpbl9Fbl9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTQpCmBgYAoKYGBge3J9Cm5hbWVzKE9kZGFfYXJiX0dJTkkpW1s1XV0gPC0gIsOFciIKYGBgCgpgYGB7cn0KT2RkYV9hcmJfR0lOSSA8LSBPZGRhX2FyYl9HSU5JICU+JSAKICBtdXRhdGUoCiAgICBHSU5JX1ByaW3DpnIgPSAoKE9kZGFfYXJiX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvbmFzam9fYXJiX3JlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAtIE9kZGFfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb19hcmJfcmVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0luZHVzdHJpID0gKChPZGRhX2FyYl9HSU5JJEluZHVzdHJpL25hc2pvX2FyYl9yZWQkSW5kdXN0cmkgLSBPZGRhX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9fYXJiX3JlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9IZWxzZSA9ICgoT2RkYV9hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9fYXJiX3JlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAgLSBPZGRhX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9fYXJiX3JlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSkKYGBgCgpgYGB7cn0KT2RkYV9hcmJfR0lOSSA8LSBPZGRhX2FyYl9HSU5JICU+JSAKICBtdXRhdGUoCiAgICBSRElfUHJpbcOmciA9IDEgLyBhYnMoT2RkYV9hcmJfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYCAvIE9kZGFfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9fYXJiX3JlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAvIG5hc2pvX2FyYl9yZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9JbmR1c3RyaSA9IDEgLyBhYnMoT2RkYV9hcmJfR0lOSSRJbmR1c3RyaSAvIE9kZGFfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9fYXJiX3JlZCRJbmR1c3RyaSAvIG5hc2pvX2FyYl9yZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9IZWxzZSA9IDEgLyBhYnMoT2RkYV9hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvT2RkYV9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb19hcmJfcmVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb19hcmJfcmVkJGBBbGxlIE7DpnJpbmdlcmApKSAlPiUgCiAgCiAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZSgKICBPZGRhX2FyYl9HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiR0lOSSIgPSAzLCAiUkRJIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJPZGRhKC0yMDE5KTogR2luaSAmIFJESSI9OCkpCgprYWJsZSgKICBPZGRhX2FyYl9HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkVpci9FciIgPSAzLCAiRWluL0VuIiA9IDMsICJMUSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiT2RkYSgtMjAxOSk6IExva2Fsa3ZvdGllbnQiPTExKSkKYGBgCgojIyMjIyBVbGxlbnN2YW5nCgpgYGB7cn0KVWxsZW5fYXJiX0dJTkkgPC0gc3lzc2VsX2FyYiAlPiUgCiAgZmlsdGVyKGtuciAlaW4lICI0NjE4IikKYGBgCgpgYGB7cn0KVWxsZW5fYXJiX0dJTkkgPC0gVWxsZW5fYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEVpcl9Fcl9Qcmltw6ZyID0gYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9JbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSGVsc2UgPSBgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAKICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaS9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgRWluX0VuX0hlbHNlID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoVWxsZW5fYXJiX0dJTkkpW1s1XV0gPC0gIsOFciIKYGBgCgpgYGB7cn0KVWxsZW5fYXJiX0dJTkkgPC0gVWxsZW5fYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoVWxsZW5fYXJiX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gVWxsZW5fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKFVsbGVuX2FyYl9HSU5JJEluZHVzdHJpL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAtIFVsbGVuX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChVbGxlbl9hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIFVsbGVuX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpVbGxlbl9hcmJfR0lOSSA8LSBVbGxlbl9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKFVsbGVuX2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gVWxsZW5fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSW5kdXN0cmkgPSAxIC8gYWJzKFVsbGVuX2FyYl9HSU5JJEluZHVzdHJpIC8gVWxsZW5fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKFVsbGVuX2FyYl9HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9VbGxlbl9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoCiAgVWxsZW5fYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIlVsbGVuc3Zhbmc6IEdpbmkgJiBSREkiPTgpKQoKa2FibGUoCiAgVWxsZW5fYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiRWlyL0VyIiA9IDMsICJFaW4vRW4iID0gMywgIkxRIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJVbGxlbnN2YW5nOiBMb2thbGt2b3RpZW50Ij0xMSkpCmBgYAoKPz9EZXR0ZSBmZXJkaWc/PwoKLS0gT3BwZGF0ZXJ0IExRLXZlcmRpYXIKCiMjIE5hc2pvbmFsdD8/IChEZXR0ZSBrYW4ga2FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhbnNramUgYmxpIHRhdHQgdmVray4gRGV0IHNlciB2aSBldHRlciBrdmFydCkKCmBgYHtyfQojc3lzc2VsX2FyYiA8LSBzeXNzZWxfYXJiICU+JSAKIyAgbXV0YXRlKEVpcl9Fcl9Kb3JkYnJ1ayA9IGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiMgICAgICAgICBFaXJfRXJfSW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAojICAgICAgICAgRWlyX0VyX0VsX1Zhbm5fUmVubyA9IGBFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbmAvYEFsbGUgTsOmcmluZ2VyYCwKIyAgICAgICAgIEVpcl9Fcl9CeWdnX29nX0FubGVnZyA9IGBCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXRgL2BBbGxlIE7DpnJpbmdlcmAsCiMgICAgICAgICBFaXJfRXJfRmluYW5zID0gYEZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nYC9gQWxsZSBOw6ZyaW5nZXJgLAojICAgICAgICAgRWlyX0VyX1VuZGVydmlzbmluZyA9IFVuZGVydmlzbmluZy9gQWxsZSBOw6ZyaW5nZXJgLAojICAgICAgICAgRWlyX0VyX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmApCmBgYAoKYGBge3J9CiNuYXNqb25hbHRfYXJiZWlkc3N0ZWQgPC0gbmFzam9uYWx0X2FyYmVpZHNzdGVkICU+JSAKIyAgbXV0YXRlKEVpbl9Fbl9Kb3JkYnJ1ayA9IGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiMgICAgICAgICBFaW5fRW5fSW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAojICAgICAgICAgRWluX0VuX0VsX1Zhbm5fUmVubyA9IGBFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbmAvYEFsbGUgTsOmcmluZ2VyYCwKIyAgICAgICAgIEVpbl9Fbl9CeWdnX29nX0FubGVnZyA9IGBCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXRgL2BBbGxlIE7DpnJpbmdlcmAsCiMgICAgICAgICBFaW5fRW5fRmluYW5zID0gYEZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nYC9gQWxsZSBOw6ZyaW5nZXJgLAojICAgICAgICAgRWluX0VuX1VuZGVydmlzbmluZyA9IFVuZGVydmlzbmluZy9gQWxsZSBOw6ZyaW5nZXJgLAojICAgICAgICAgRWluX0VuX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmApCgoKI0xRX2FyYl9Kb3JkYnJ1ayA8LSBzeXNzZWxfYXJiICU+JSAKIyAgc2VsZWN0KGFhciwga25hdm4sIEVpcl9Fcl9Kb3JkYnJ1aykgJT4lIAojICBtdXRhdGUoYWFyID0gYXMuY2hhcmFjdGVyKGFhcikpICU+JSAKIyAgbGVmdF9qb2luKHNlbGVjdCguZGF0YSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCwgYWFyLCBFaW5fRW5fSm9yZGJydWspLCBieSA9IGMoImFhciIpKSAlPiUgCiMgIG11dGF0ZShhbmRlbCA9IEVpcl9Fcl9Kb3JkYnJ1ay9FaW5fRW5fSm9yZGJydWspCgoKI0xRX2FyYl9JbmR1c3RyaSA8LSBzeXNzZWxfYXJiICU+JSAKIyAgc2VsZWN0KGFhciwga25hdm4sIEVpcl9Fcl9JbmR1c3RyaSkgJT4lIAojICBtdXRhdGUoYWFyID0gYXMuY2hhcmFjdGVyKGFhcikpICU+JSAKIyAgbGVmdF9qb2luKHNlbGVjdCguZGF0YSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCwgYWFyLCBFaW5fRW5fSW5kdXN0cmkpLCBieSA9IGMoImFhciIpKSAlPiUgCiMgIG11dGF0ZShhbmRlbCA9IEVpcl9Fcl9JbmR1c3RyaS9FaW5fRW5fSW5kdXN0cmkpCgoKI0xRX2FyYl9FbF9WYW5uX1Jlbm8gPC0gc3lzc2VsX2FyYiAlPiUgCiMgIHNlbGVjdChhYXIsIGtuYXZuLCBFaXJfRXJfRWxfVmFubl9SZW5vKSAlPiUgCiMgIG11dGF0ZShhYXIgPSBhcy5jaGFyYWN0ZXIoYWFyKSkgJT4lIAojICBsZWZ0X2pvaW4oc2VsZWN0KC5kYXRhID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkLCBhYXIsIEVpbl9Fbl9FbF9WYW5uX1Jlbm8pLCBieSA9IGMoImFhciIpKSAlPiUgCiMgIG11dGF0ZShhbmRlbCA9IEVpcl9Fcl9FbF9WYW5uX1Jlbm8vRWluX0VuX0VsX1Zhbm5fUmVubykKCgojTFFfYXJiX0J5Z2dfQW5sZWdnIDwtIHN5c3NlbF9hcmIgJT4lIAojICBzZWxlY3QoYWFyLCBrbmF2biwgRWlyX0VyX0J5Z2dfb2dfQW5sZWdnKSAlPiUgCiMgIG11dGF0ZShhYXIgPSBhcy5jaGFyYWN0ZXIoYWFyKSkgJT4lIAojICBsZWZ0X2pvaW4oc2VsZWN0KC5kYXRhID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkLCBhYXIsIEVpbl9Fbl9CeWdnX29nX0FubGVnZyksIGJ5ID0gYygiYWFyIikpICU+JSAKIyAgbXV0YXRlKGFuZGVsID0gRWlyX0VyX0J5Z2dfb2dfQW5sZWdnL0Vpbl9Fbl9CeWdnX29nX0FubGVnZykKCgojTFFfYXJiX0ZpbmFucyA8LSBzeXNzZWxfYXJiICU+JSAKIyAgc2VsZWN0KGFhciwga25hdm4sIEVpcl9Fcl9GaW5hbnMpICU+JSAKIyAgbXV0YXRlKGFhciA9IGFzLmNoYXJhY3RlcihhYXIpKSAlPiUgCiMgIGxlZnRfam9pbihzZWxlY3QoLmRhdGEgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQsIGFhciwgRWluX0VuX0ZpbmFucyksIGJ5ID0gYygiYWFyIikpICU+JSAKIyAgbXV0YXRlKGFuZGVsID0gRWlyX0VyX0ZpbmFucy9FaW5fRW5fRmluYW5zKQoKCiNMUV9hcmJfVW5kZXJ2aXNuaW5nIDwtIHN5c3NlbF9hcmIgJT4lIAojICBzZWxlY3QoYWFyLCBrbmF2biwgRWlyX0VyX1VuZGVydmlzbmluZykgJT4lIAojICBtdXRhdGUoYWFyID0gYXMuY2hhcmFjdGVyKGFhcikpICU+JSAKIyAgbGVmdF9qb2luKHNlbGVjdCguZGF0YSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCwgYWFyLCBFaW5fRW5fVW5kZXJ2aXNuaW5nKSwgYnkgPSBjKCJhYXIiKSkgJT4lIAojICBtdXRhdGUoYW5kZWwgPSBFaXJfRXJfVW5kZXJ2aXNuaW5nL0Vpbl9Fbl9VbmRlcnZpc25pbmcpCgoKI0xRX2FyYl9IZWxzZSA8LSBzeXNzZWxfYXJiICU+JSAKIyAgc2VsZWN0KGFhciwga25hdm4sIEVpcl9Fcl9IZWxzZSkgJT4lIAojICBtdXRhdGUoYWFyID0gYXMuY2hhcmFjdGVyKGFhcikpICU+JSAKIyAgbGVmdF9qb2luKHNlbGVjdCguZGF0YSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCwgYWFyLCBFaW5fRW5fSGVsc2UpLCBieSA9IGMoImFhciIpKSAlPiUgCiMgIG11dGF0ZShhbmRlbCA9IEVpcl9Fcl9IZWxzZS9FaW5fRW5fSGVsc2UpCmBgYAoKYGBge3J9CiNzeXNzZWxfYXJiIDwtIHN5c3NlbF9hcmIgJT4lIAojICBtdXRhdGUoTFFfYXJiX0pvcmRicnVrID0gTFFfYXJiX0pvcmRicnVrJGFuZGVsLAojICAgICAgICAgTFFfYXJiX0luZHVzdHJpID0gTFFfYXJiX0luZHVzdHJpJGFuZGVsLAojICAgICAgICAgTFFfYXJiX0VsX1Zhbm5fUmVubyA9IExRX2FyYl9FbF9WYW5uX1Jlbm8kYW5kZWwsCiMgICAgICAgICBMUV9hcmJfQnlnZ19BbmxlZ2cgPSBMUV9hcmJfQnlnZ19BbmxlZ2ckYW5kZWwsCiMgICAgICAgICBMUV9hcmJfRmluYW5zID0gTFFfYXJiX0ZpbmFucyRhbmRlbCwKIyAgICAgICAgIExRX2FyYl9VbmRlcnZpc25pbmcgPSBMUV9hcmJfVW5kZXJ2aXNuaW5nJGFuZGVsLAojICAgICAgICAgTFFfYXJiX0hlbHNlID0gTFFfYXJiX0hlbHNlJGFuZGVsKQpgYGAKCmBgYHtyfQojTFFfYXJiIDwtIHN5c3NlbF9hcmIgJT4lIAojICBzZWxlY3QoYWFyLCBrbmF2biwgTFFfYXJiX0pvcmRicnVrLCBMUV9hcmJfSW5kdXN0cmksIExRX2FyYl9FbF9WYW5uX1Jlbm8sIExRX2FyYl9CeWdnX0FubGVnZywgTFFfYXJiX0ZpbmFucywgTFFfYXJiX1VuZGVydmlzbmluZywgTFFfYXJiX0hlbHNlKQpgYGAKCmBgYHtyfQojTFFfYXJiW2lzLm5hKExRX2FyYildID0gMApgYGAKCi0gICAKCiMgUGVuZGxpbmcKCkRlIHVsaWtlIGtvbW11bmVuZSBvZyByZWdpb25lbmUgaGFyIHVsaWtlIGJlaG92LCBmb3IgYXQgcmVnaW9uZW5lIHNrYWwgdXR2aWtsZSBzZWcgZXIgcGVuZGxpbmcgZXQgdmlrdGlnIGJlZ3JlcCBmb3Igw6UgdGlsdHJla2tlIHNlZyBhcmJlaWRza3JhZnQuClZlbGRpZyBtYW5nZSBrb21tdW5lciBoYXIgZm9yIGxpdGUgYXJiZWlkc3BsYXNzZXIgaSBmb3Job2xkIHRpbCBhbnRhbGwgYXJiZWlkZW5kZSBpbm5ieWdnZXJlLCBzb20gdmlsIHNpIGF0IGRlIGZsZXN0ZSBlciBhdmhlbmdpZ2UgYXYgcGVuZGxlcmUuClBlbmRsaW5nIGthbiB2w6ZyZSB0aWwgYW5kcmUga29tbXVuZXIgaSBzYW1tZSByZWdpb24gZWxsZXIgdGlsIGFuZHJlIHJlZ2lvbmVyLgpBbGxlIGtvbW11bmVyIGhhciBrYW5za2plIGlra2UgYXJiZWlkc3BsYXNzZXIgaW5uZW4gYWxsZSBmYWdmZWx0LCBhcmJlaWRzdGFrZXJlIGVyIGRlcmZvciBhdmhlbmdpZyBhdiDDpSBwZW5kbGVyIHRpbCBhbmRyZSBrb21tdW5lciBmb3Igw6UgZmlubmUgcmVsZXZhbnQgYXJiZWlkLgpEZXQgc2FtbWUgZ2plbGRlciBkZXJzb20gYXJiZWlkc3Rha2VyIGhhciB0aWxow7hyaWdoZXQgdGlsIGVuIGtvbW11bmUsIG1lbiBkZXQgaWtrZSBmaW5uZXMgcmVsZXZhbnQgYXJiZWlkIGRhIGVyIGhhbiBvZ3PDpSBuw7hkdCB0aWwgw6Ugc8O4a2Ugam9iYiBpIGFuZHJlIGtvbW11bmVyLgpIZXIga29tbWVyIGJlZ3JlcGVuZSBpbm5wZW5kbGluZyBvZyB1dHBlbmRsaW5nIGlubiwgc29tIGJldHlyIGF0IG5vZW4ga29tbXVuZXIgZWxsZXIgcmVnaW9uZXIgaGFyIGZsZXJlIGFyYmVpZHNwbGFzc2VyIHRpbGdqZW5nZWxpZ2UgZW5uIGRlIGhhciBpbm5ieWdnZXJlIHNvbSBrYW4gam9iYmUgaW5uYWQgaSBrb21tdW5lbiBlbGxlciBhdCBkZSBpa2tlIGhhciBub2sgYXJiZWlkc3BsYXNzZXIgb2cgaW5uYnlnZ2VyZW5lIGVyIG7DuGR0IHRpbCDDpSBzw7hrZSBqb2JiIGFuZHJlIHBsYXNzZXIuClZpIHNrYWwgc2UgcMOlIGlubnBlbmRsaW5nIG9nIHV0cGVuZGxpbmcgc29tIHZpbCBrdW5uZSBmb3J0ZWxsZSBvc3MgaSBodmlsa2VuIGdyYWQgZXQgc3RlZCBlciBpbnRlZ3JlcnQgaSBldCBzdMO4cnJlIGFyYmVpZHNtYXJrZWQgPGh0dHBzOi8vcmVnaW9uYWxhbmFseXNlLm5vL3JhcHBvcnQvMzAwNC8xLzQ+LgoKTmVkZW5mb3IgdmlsIHZpIGbDuHJzdCB0YSBmb3Igb3NzIHJlZ2lvbmVuIEhhdWdhbGFuZGV0IG9nIFN1bm5ob3JkbGFuZCBtZWQgVWxsZW5zdmFuZywgb2cgc2UgcMOlIGRpc3NlIHJlZ2lvbmVuZSBodmVyIGZvciBzZWcuClPDpSBrb21tZXIgZW4gdGFiZWxsIHNvbSB0YXIgZm9yIHNlZyBkaXNzZSByZWdpb25lbmUgc2FtbGV0LgpWaSDDuG5za2VyIGbDuHJzdCDDpSBza2lsbGUgZGlzc2UgdG8gcmVnaW9uZW5lIGZvciDDpSBzZSBpIGh2aWxrZW4ga29tbXVuZSBhbmRlbGVuIGF2IGlubnBlbmRsaW5nIG9nIHV0cGVuZGxpbmcgZXIgc3TDuHJzdCBvZyBtaW5zdC4KRm9yIHPDpSDDpSBzZSBww6UgcGVuZGxpbmdlbiBtZWxsb20gcmVnaW9uZW5lLgoKSSByYWRlbmUgc2VlcyBwZW5kbGluZyBpbm4gdGlsIGtvbW11bmVuZS4KTmVkZXJzdGUgcmFkIHZpc2VyIHRvdGFsZW4gYXYgYW50YWxsIHBlbmRsZXJlIGlubiB0aWwgZGVuIGVua2VsdGUga29tbXVuZS4KSGVyIGthbiB2aSBzZSBlbiBhbmRlbCBzdGlsbGluZ2VyIHNvbSBlciBiZXNhdHQgYXYgYXJiZWlkc3Rha2VyZSBmcmEgYW5kcmUga29tbXVuZXIgaSBIYXVnYWxhbmRzcmVnaW9uZW4uCgpJIGtvbG9ubmVuZSBzZXIgbWFuIGRlIHNvbSBwZW5kbGVyZSB1dCBhdiBodmVyIGVua2VsdCBrb21tdW5lLgpEZXQgdmlsIHNpIGFyYmVpZHN0YWtlcmUgc29tIGJvciBpIGVuIGtvbW11bmUsIG9nIHNvbSBoYXIgYXJiZWlkc3RlZCBpIGVuIGFubmVuIGtvbW11bmUgaW5uZW5mb3IgSGF1Z2xhbmRzcmVnaW9uZW4uCgpEZSBzb20gZXIgbWFya2VydCBtZWQgZ3VsdCBlciBhcmJlaWRzdGFrZXJlIHNvbSBib3Igb2cgam9iYmVyIGkgc2FtbWUga29tbXVuZS4KCkhhdWdsYW5kc3JlZ2lvbmVuOgoKIVtdKEJpbGRlL0hhdWdhbGFuZGV0LlBORyAiSGF1Z2xhbmRzcmVnaW9uZW4iKQoKSGF1Z2FsYW5kc3JlZ2lvbmVuIGhhciA0NDExOSBhcmJlaWRzcGxhc3NlciwgaHZvcmF2IDEzMTcwIGVyIHBlbmRsZXJlLgoKSGF1Z2VzdW5kLCBLYXJtw7h5IG9nIFR5c3bDpnIgZXIgZGUga29tbXVuZW5lIGkgcmVnaW9uZW4gbWVkIGjDuHllc3QgYW5kZWwgcGVuZGxlcmUgYsOlZGUgbsOlciBkZXQgZ2plbGRlciBpbm4tIG9nIHV0cGVuZGxpbmcuCkxhIG9zcyBzZSBuw6ZybWVyZSBww6UgSGF1Z2VzdW5kIHNvbSBoYXIgZW4gc3RvciBkZWwgYXYgYXJiZWlkc3Rha2VybmUgaSByZWdpb25lbi4KRGV0IGdqZWxkZXIgYsOlZGUgbsOlciB2aSBzZXIgcMOlIGlubnBlbmRsaW5nLCB1dHBlbmRsaW5nIG9nIGRlIHNvbSBib3Igb2cgam9iYmVyIGkgc2FtbWUga29tbXVuZS4KVXQgaWZyYSB0YWJlbGxlbiBrYW4gdmkgc2UgYXQgSGF1Z2VzdW5kIGhhciAxMTcxNCBhcmJlaWRzdGFrZXJlIHNvbSBib3Igb2cgam9iYmVyIGkga29tbXVuZW4uCkZyYSBIYXVnZXN1bmQgZXIgZGV0IGVrc2VtcGVsdmlzIDEwMjkgYXJiZWlkc3Rha2VyZSBzb20gcGVuZGxlciB0aWwgVHlzdsOmciBvZyAyNTg2IGFyYmVpZHN0YWtlcmUgc29tIHBlbmRsZXIgdGlsIEthcm3DuHkuClRpbCBTYXVkYSBvZyBVdHNpcmEgZXIgZGV0IGVuIGJldHlkZWxpZyBsYXZlcmUgYW5kZWwgc29tIHBlbmRsZXIuCkdydW5uZW4gdGlsIGF0IGRldCBub2sgYXQgZGV0IGVyIG1pbmRyZSBrb21tdW5lciBtZWQgZsOmcnJlIGFyYmVpZHNwbGFzc2VyLgpNYW5nZSBhdiBkZSBzb20gYm9yIGkgZGlzdHJpa3RlbmUgc29tIGVrc2VtcGVsdmlzIFNhdWRhIG9nIFV0c2lyYSBqb2JiZXIgb2cgYm9yIGkgc2FtbWUga29tbXVuZS4KVmkga2FuIHNlIGF0IGkgU2F1ZGEgam9iYmVyIG9nIGJvciBkZXQgMTc4OSBhcmJlaWRzdGFrZXIsIG1lbnMgZGUgaGFyIDMxIHN0eWtrIHNvbSBwZW5kbGVyIGlubiB0aWwga29tbXVuZW4gb2cgNjYgc3R5a2sgc29tIHBlbmRsZXIgdXQgYXYga29tbXVuZW4uCkRldCBrYW4gdsOmcmUgZmxlcmUgc29tIHBlbmRsZXIgaW5uIHRpbCBvZyB1dCBhdiBrb21tdW5lbiBmcmEgYW5kcmUgcmVnaW9uZXIsIG1lbiBoZXIgc2VyIHZpIHRhbGxlbmUgcMOlIGRlIHNvbSBwZW5kbGVyIGkgSGF1Z2FsYW5kc3JlZ2lvbmVuLgoKVmkgdmV0IGF0IEhhdWdlc3VuZCBlciByZWdpb25zZW50cnVtIG1lZCBzeWtlaHVzIG9nIGjDuGdza29sZS4KU2FtdGlkaWcgaGFyIEhhdWdlc3VuZCBmbGVyZSBvbGplIG9nIHNqw7hmYXJ0c27DpnJpbmdlci4KRGV0IGVyIHNlbnRyYWxpc2VydCBzb20gYmV0eXIgYXQgZGV0IGVyIGdydW5ubGFnIGZvciBldCBzdMO4cnJlIGpvYmJtYXJrZWQuCkRldCBlciDDpXJzYWtlbiB0aWwgYXQgSGF1Z2VzdW5kIGhhciBtZXIgaW5ucGVuZGxpbmcgZW5uIGRlIGFuZHJlIGtvbW11bmVuZSBpIHJlZ2lvbmVuLgpLYXJtw7h5IG9nIFR5c3bDpnIgc29tIGxpZ2dlciBuw6ZybWVzdCBIYXVnZXN1bmQgaGFyIHN0w7hyc3QgYW5kZWwgdXRwZW5kbGluZywgb2dzw6UgdGlsIEhhdWdlc3VuZC4KClN1bm5ob3JkbGFuZAoKIVtdKEJpbGRlL1N1bm5ob3JkbGFuZC5QTkcgIlN1bm5ob3JkbGFuZCBvZyBVbGxlbnN2YW5nIikKCkkgU3VubmhvcmRsYW5kc3JlZ2lvbmVuIGVyIGRldCAyODI3NSBhcmJlaWRzdGFrZXJlIG9tIGhhciBzaW4gYXJiZWlkc3BsYXNzLCBhdiBkaXNzZSBlciBkZXQgMjU3NSBzb20gaGFyIHNpdHQgYXJiZWlkIGkgZW4gYW5uZW4ga29tbXVuZSBlbm4gZGVuIGRlIGJvciBpLgoKU29tIHZpIGthbiBzZSBlciBTdG9yZCBkZW4ga29tbXVuZW4gbWVkIGZsZXN0IGFyYmVpZHN0YWtlcmUuCkRldHRlIGthbiB2aSBzZSBpIHNhbW1lbmhlbmcgbWVkIGF0IFN0b3JkIGVyIHNvbSBldCBzZW50cnVtIGZvciByZWdpb25lbi4KRW4gZGVsIGF2IGRlIGludGVya29tbXVuYWxlIHNhbWFyYmVpZGVuZSBoYXIgc2luZSBrb250b3JlciBsb2thbGlzZXJ0IHDDpSBTdG9yZC4KU3RvcmQgaGFyIDczMTQgc29tIGLDpWRlIGJvciBvZyBhcmJlaWRlciBpbm5hZCBpIGtvbW11bmVuLgrDhSBhdiBTdG9yZGFidWVuIHNvbSBwZW5kbGVyIHV0IGF2IGtvbW11bmVuIGVyIGRldCBmbGVzdCBzb20gcGVuZGxlciB0aWwgQsO4bWxvIG9nIEZpdGphci4KRGV0dGUgZ2plbGRlciBvZ3PDpSBtb3RzYXR0IGRhIFN0b3JkIGbDpXIgZmxlc3QgaW5ucGVuZGxlcmUgZnJhIGRlIHNhbW1lIGtvbW11bmVuZS4KU3RvcmQgb2cgVWxsZW5zdmFuZyBlciBkZSBlbmVzdGUga29tbXVuZW5lIHNvbSBoYXIgZmxlcmUgc29tIHBlbmRsZXIgaW5uIGVubiB1dC4KCkkgRXRuZSBlciBkZXQgZ2Fuc2tlIGxpa3QgbWVkIGlubiBvZyB1dHBlbmRsZXJlIGRhIGRlIGhhciA2NiBzb20gcGVuZGxlciB1dCBvZyA2MSBzb20gcGVuZGxlciBpbm4gdGlsIGtvbW11bmVuLgpFdG5lIGVyIG9nc8OlIGRlbiBrb21tdW5lbiBzb20gaGFyIG1pbnN0IGFyYmVpZGVyZSBzb20gZHJpdmVyIG1lZCBwZW5kbGluZy4KClZpIGhhciB2YWxndCDDpSB0YSBtZWQgVWxsZW5zdmFuZyBpIFN1bm5ob3JkbGFuZHNvdmVyc2lrdGVuLgpFdG5lIG9nIEt2aW5uaGVyYWQgZXIgYmVnZ2UgbmFib2tvbW11bmVyIHRpbCBVbGxlbnN2YW5nLgpVbGxlbnN2YW5nIGhhciBsaXRlIGLDpWRlIGlubiBvZyB1dHBlbmRsaW5nLgoKRW4gc2FtbGV0IG92ZXJzaWt0IG92ZXIgSGF1Z2FsYW5kc3JlZ2lvbmVuIG9nIFN1bm5ob3JkbGFuZHNyZWdpb25lbgoKIVtdKEJpbGRlL1NhbWxldC5QTkcgIlNhbWxldCBvdmVyc2lrdCIpCgpWaSBoYXIgc2V0dCBww6UgaW5uZGVsaW5nZW5lIGkgZGUgZm9yc2tqZWxsaWdlIHJlZ2lvbmVuZS4KVmlkZXJlIMO4bnNrZXIgdmkgw6Ugc2UgcMOlIHJlZ2lvbmVuZSBpIGVuIHNhbWxldCB0YWJlbGwuCgpWaSBoYXIgdGlkbGlnZXJlIHNrcmV2ZXQgb20gYXQgSGF1Z2FsYW5kc3JlZ2lvbmVuIGhhciAxMzE3MCBwZW5kbGVyZSwgbWVucyBTdW5uaG9yZGxhbmRzcmVnaW9uZW4gb2cgVWxsZW5zdmFuZyBoYXIgMjU3NSBwZW5kbGVyZS4KT20gdmkgc2VyIGJlZ2dlIHJlZ2lvbmVuZSBzYW1sZXQsIMO4a2VyIGFudGFsbCBwZW5kbGVyZSBtZWQgdG90YWx0IDMzMTEgYXJiZWlkc3Rha2VyZS4KRGV0IHZpbCBzaSBhdCBkZXQgZXIgMzMxMSBzdHlra2VyIHNvbSBwZW5kbGVyIHDDpSB0dmVycyBhdiByZWdpb25lbmUuCgpVdHNpcmEgaGFyIGlra2UgaW5uLSBlbGxlciB1dHBlbmRsZXJlIHRpbCBTdW5uaG9yZGxhbmQuCkJvcnRzZXR0IGZyYSBlbiBwZXJzb24gc29tIHBlbmRsZXIgdGlsIFN2ZWlvIGhhciBoZWxsZXIgaWtrZSBCb2tuIHV0cGVuZGxpbmcgdGlsIFN1bm5ob3JkbGFuZC4KCkhhdWdlc3VuZCBlciBkZW4ga29tbXVuZW4gc29tIGhhciBmbGVzdCBwZW5kbGVyZSBpbm4gdGlsIGtvbW11bmVuLgpEZSBsaWdnZXIgbGFuZ3QgZm9yYW4gZGUgYW5kcmUga29tbXVuZW5lIG7DpXIgZGV0IGVyIHNuYWtrIG9tIHBlbmRsaW5nIGlubiB0aWwga29tbXVuZW5lLgpLYXJtw7h5IGVyIGRlbiBrb21tdW5lbiBzb20gaGFyIGZsZXN0IGlubmJ5Z2dlcmUgc29tIHBlbmRsZXIgdXQgYXYga29tbXVuZW4uCgpWaWRlcmUga2FuIG1hbiBzZSBww6UgZGUgc3lzdGVtYXRpc2tlIGZvcnNramVsbGVuZSBzZXR0IGkgZm9yaG9sZCB0aWwgc2VudHJhbGl0ZXQgb2cgdGlsZ2plbmdlbGlnaGV0IGkgZGV0IGxva2FsZSBhcmJlaWRzbWFya2VkZXQuCgpIYXVnZXN1bmQsIEthcm3DuHkgb2cgU3RvcmQgZXIgc2VudHJhbGUga29tbXVuZXIgaHZvciBkZXQgZmlubmVzIGVuIHN0b3IgYW5kZWwgYXJiZWlkc3BsYXNzZXIgb2cgdGlsZ2plbmdlbGlnaGV0ZW4gaSBhcmJlaWRzbWFya2VkZXQgZXIgc3TDuHJyZSBlbm4gaSBla3NlbXBlbHZpcyBTYXVkYSwgVXRzaXJhLCBUeXNuZXMgZWxsZXIgVWxsZW5zdmFuZy4KRGUgc2VudHJhbGlzZXJ0ZSBrb21tdW5lbmUgaGFyIGVuIGZvcmRlbCBpIGZvcmhvbGQgdGlsIMOlIHNrYXBlIGtseW5nZXIsIGRldCBtZWQgdGFua2UgcMOlIGF0IG7DpXIgZmxlcmUgbWVubmVza2VyIGJvc2V0dGVyIHNlZyBpIHNhbW1lIG9tcsOlZGUga2FuIGVuIGRyYSBueXR0ZSBhdiBrb21wZXRhbnNlbiBkZSBpbm5laGFyLgpTYXVkYSwgVXRzaXJhLCBUeXNuZXMgb2cgVWxsZW5zdmFuZyBlciBla3NlbXBsZXIgcMOlIGtvbW11bmVyIGkgdXRrYW50ZW4gYXYgcmVnaW9uZW5lLgpEZSBiZWZpbm5lciBzZWcgc8OlcGFzcyBsYW5ndCB1dGVuZm9yIGF0IGRlIGlra2UgdmlsIGRyYSBueXR0ZSBhdiBzZW50cmFsaXRldC4KCkkgZmlndXIgMyBvZyA0IHZpc2VzIGRldCBhdCBkZSBzaXN0ZSAxMCDDpXJlbmUgaGFyIEhhdWdlc3VuZCBoYXR0IGVuIHJlZHVrc2pvbiBpIGFudGFsbCBhbnNhdHRlLCBtZW4gS2FybcO4eSwgVmluZGFmam9yZCBvZyBUeXN2w6ZyIGhhciBoYXR0IGVuIG1hcmthbnQgw7hrbmluZyBpIGFudGFsbCBhcmJlaWRzdGFrZXJlLgpEZXQgdmkgdmV0IGVyIGF0IGRldCBoYXIgdXR2aWtsZXQgc2VnIHN0w7hycmUgbsOmcmluZ3NrbHluZ2VyIHV0ZW5mb3IgSGF1Z2VzdW5kIGRlIHNpc3RlIMOlcmVuZSBzb20ga2FuIGhhIGVuIHNhbW1lbmhlbmcgbWVkIMO4a25pbmcgaSBhbnRhbGwgYW5zYXR0ZS4KU2FtdGlkaWcgaGFyIG9samVicmFuc2plbiBpIHNhbW1lIHBlcmlvZGUgc2xpdHQgbWVkIG5lZGdhbmdzdGlkZXIgc29tIHDDpXZpcmtlciBiw6VkZSBIYXVnZXN1bmQgb2cgU3RvcmQuCkRpc3NlIGtvbW11bmVuZSBoYXIgZW4gZGVsIG9samViYXNlcnRlIG7DpnJpbmdlciBvZyBpIGRlIHBlcmlvZGVuZSBvbGplbWFya2VkZXQgc3ZpbmdlciB2aWwgYXJiZWlkc21hcmtlZGV0IHZpc2UgbWFya2FudCBuZWRnYW5nIGkgYW50YWxsIGFyYmVpZHNwbGFzc2VyLgpEZXQgdmlsIG9nc8OlIHZpc2UgZW4gYmV0eWRlbGlnIMO4a25pbmcgaSBhbnRhbGwgYXJiZWlkc3BsYXNzZXIgb20gZGV0IGVyIG9wcGdhbmdzdGlkZXIuCk9wcGdhbmdzdGlkZXIgaSBvbGplbsOmcmluZ2VuIGdpciBlbiDDuGtuaW5nIGF2IHBlbmRsZXJlIGlubiB0aWwga29tbXVuZXIgc29tIGhhciB2aXJrc29taGV0ZXIgaW5uZW5mb3Igb2xqZW7DpnJpbmdlbi4KCi0gICAKCmBgYHtyIHNpc3RlfQojIFNpc3RlCmBgYAoKLSAgIAo=